2015-12-04 2 views
0
return new List<string> { newItem }.Union(currentList.Take(9)); 

Как сохранить новый элемент вверху? Это кажется очень простым, но у меня есть замораживание мозга.LINQ Union - строка keep orderby

Он, естественно, заказывает строки, что означает, что мой newItem может появиться в любом месте списка. I currentList.Remove(newItem); просто в том случае, если он уже был там.

ответ

3

Попробуйте использовать Concat вместо Union, бывший должен поддерживать порядок в то время как последний набор метод, который удаляет дубликаты и не гарантирует порядок:

return new List<string> { newItem }.Concat(currentList.Take(9)); 

Это относится к Linq-To-Objects как указано here:

Когда объект возвращается этим методом перечисляется, Союз перечисляет первую и вторую в этом порядке и дает каждый элемент, который га еще не уступили.

Но это также относится и к основе баз данных поставщиков LINQ, как Linq-To-Sql или Linq-To-Entities так UNION ALL и UNION ведут себя подобно (бывший держит заказ, не последний).

+0

Спасибо, Тим, который работал как запланировано –