2016-12-01 3 views
0

У меня есть два списка, которые содержат идентификатор, тип и рейтинг. Я объединяю эти два списка и выделяю их с помощью Id с помощью moreLinq. Тем не менее, я получаю рейтинг, который добавляется в список позже. Я хотел бы иметь возможность отличать их идентификатором и получить элемент, который имеет наибольший рейтинг.как выбрать наивысший рейтинг, если идентификаторы одинаковые (разные)?

item1.Union(item2).DistinctBy(e => e.Id); 
where item1 is a baseItem of 
BaseItem{ 
    Id, 
    Type, 
    Rating, 
} 

Это всегда дает мне оценки item2, если их идентификаторы одинаковы.

ответ

0

Вы можете группировать, порядок и взять первый элемент (и вам не нужно MoreLinq для этого больше):

var result = item1.Union(item2) 
        .GroupBy(e => e.id) 
        .Select(g => 
         g.OrderByDescending(e => e.Rating).First() 
       ); 
+0

Это большой один. Я был настолько сосредоточен на попытке сделать как разную функцию и не думал об этой возможности. Спасибо за ответ, но я изменил First() в FirstOrDefault(). –

+0

@ChitKhine Не проблема, рада помочь. Что касается 'FirstOrDefault()' - вы гарантированно * всегда имеете хотя бы один элемент в группировке (иначе группировка не существовала). Для меня запись 'FirstOrDefault()' может вводить в заблуждение читателей - хотя я соглашаюсь, что это может быть вопросом предпочтения без реального воздействия – Rob