2016-12-01 3 views
0

ID, 유형 및 등급이 포함 된 두 개의 목록이 있습니다. moreLinq를 사용하여이 두 목록을 결합하고 ID별로 구별합니다. 그러나 나중에 목록에 추가되는 평가가 나타납니다. 나는 그들과 ID를 구분할 수 있고 가장 높은 점수를 얻는 항목을 얻을 수 있기를 원합니다.ID가 동일하면 (별개) 가장 높은 평점 항목을 선택하는 방법은 무엇입니까?

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

ID가 동일하면 항상 item2의 등급을 부여합니다.

답변

0

당신은 그룹 주문할 수 있으며 (당신은 더 이상 이것에 대한 MoreLinq 필요하지 않습니다) 첫 번째 항목을 :

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

이것은 좋은 일입니다. 나는 별개의 기능을하려고 노력하는 것에 너무 집중했고이 가능성에 대해 생각하지 않았습니다. 대답 주셔서 감사하지만 FirstOrDefault()로 First()를 변경했습니다. –

+0

@ChitKhine 문제 없으니 기꺼이 도와주세요. 'FirstOrDefault()'와 관련하여 - 당신은 * 반드시 * 적어도 하나의 항목을 그룹핑에 가지고 있다고 보장받습니다. 그렇지 않으면 그룹화가 존재하지 않을 것입니다. 나에게'FirstOrDefault()'를 쓰는 것은 독자들에게 오해의 소지가 있을지 모르지만 - 나는 그것이 진짜 영향이없는 선호의 문제 일지 모른다는 것을 인정하지만 – Rob