linq group by,order by

我有以下清单

ID Counter SrvID FirstName -- ------ ----- --------- 1 34 66M James 5 34 66M Keith 3 55 45Q Jason 2 45 75W Mike 4 33 77U Will 

我喜欢做的是按ID按升序排序,然后得到Counter,SrvID的第一个值相同(如果有的话)。

所以输出将是这样的:

 ID Counter SrvID FirstName -- ------ ----- --------- 1 34 66M James 2 45 75W Mike 3 55 45Q Jason 4 33 77U Will 

注意如何从列表中删除ID为5,因为Counter和SrvID与我对ID 1的相同,但是ID 1首先被删除了5。

这是我会做但不工作的

  var result = (from ls in list1 group ts by new {ls.Counter, ls.SrvID} order by ls.ID select new{ ls.ID, ls.Counter.FirstOrDefault(), ls.SrvID.First, ls.FirstName}).ToList() 

 list1.GroupBy(item => new { Counter = item.Counter, SrvID = item.SrvID }) .Select(group => new { ID = group.First().ID, Counter = group.Key.Counter, SrvID = group.Key.SrvID, FirstName = group.First().FirstName}) .OrderBy(item => item.ID); 

将记录分组,并从每个组中挑选一名获胜者。

 var query = from record in list1 group record by new {record.Counter, record.SrvID } into g let winner = ( from groupedItem in g order by groupedItem.ID select groupedItem ).First() select winner; 

 var otherQuery = list1 .GroupBy(record => new {record.Counter, record.SrvID }) .Select(g => g.OrderBy(record => record.ID).First());