2014-02-04 5 views
0

у меня есть список элементов с номерами выпускаSplit список текущих и архивных элементов

ID  Issue 
apple  1 
orange 1 
apple  2 
apple  3 
orange 2 

Я хотел бы создать два списка, один с «текущим» элементы, которые являются те, с наибольшим количеством выпуска и второй список, который все остальные мИНУС текущие из них (назовем его архив)

Hows лучший способ сделать это учитывая мой список будет иметь около 1000 записей (достаточно малые)

ответ

2

Если вам нужно найти самый высокий «Выпуск» за «ID»:

var maxList = yourList.GroupBy(x => x.Name) 
         .Select(x => x.Where(y => y.Id == x.Max(z => z.Id))) 
         .SelectMany(x => x); 

var theRest = yourList.Except(maxList); 

Это будет возвращать «Оранжевый/2» и «Яблоко/3» в первом списке, а другие три записи во втором списке.

+0

Спасибо Грант, это прекрасно –

4

Это может помочь

var currentIssue = list.Max(x => x.Issue); 
var currentItems = list.Where(x => x.Issue == currentIssue).ToList(); 
var archiveItems = list.Where(x => x.Issue != currentIssue).ToList(); 
+0

Вместо того, чтобы публиковать почти то же самое, я взял на себя право отредактировать свой ответ, чтобы улучшить имена переменных :-) – chiccodoro

+0

@chiccodoro thanks.I не думал, что имена переменных слишком много :)) –

+0

Где мне тянуть maxNumber? Нужен ли мне цикл ForEach или что-то еще? –

Смежные вопросы