如何获得每个组使用Linq的第一个logging

考虑到以下logging:

Id F1 F2 F3 ------------------------------------------------- 1 Nima 1990 10 2 Nima 1990 11 3 Nima 2000 12 4 John 2001 1 5 John 2002 2 6 Sara 2010 4 

我想根据F1字段进行分组并按照Idsorting,并从类似这些logging的组的第一个logging中获取所有字段:

  Id F1 F2 F3 ------------------------------------------------- 1 Nima 1990 10 4 John 2001 1 6 Sara 2010 4 

我如何使用linq做到这一点?

4 Solutions collect form web for “如何获得每个组使用Linq的第一个logging”

  var res = from element in list group element by element.F1 into groups select groups.OrderBy(p => p.F2).First(); 
 var result = input.GroupBy(x=>x.F1,(key,g)=>g.OrderBy(e=>e.F2).First()); 

@Alireza的awnser是完全正确的,但是你必须注意,当使用这个代码

 var res = from element in list group element by element.F1 into groups select groups.OrderBy(p => p.F2).First(); 

这是类似于这个代码,因为你sorting列表,然后做分组,所以你得到的第一行组

 var res = (from element in list) .OrderBy(x => x.F2) .GroupBy(x => x.F1) .Select() 

现在,如果你想做更复杂的事情,比如采取相同的分组结果,但采取F2的第一个元素和F3的最后一个元素或更多的自定义,你可以通过研究代码

  var res = (from element in list) .GroupBy(x => x.F1) .Select(y => new { F1 = y.FirstOrDefault().F1; F2 = y.First().F2; F3 = y.Last().F3; }); 

所以你会得到类似的东西

  F1 F2 F3 ----------------------------------- Nima 1990 12 John 2001 2 Sara 2010 4 

用它来实现你想要的。 然后决定你想要返回的属性。

 yourList.OrderBy(l => l.Id).GroupBy(l => new { GroupName = l.F1}).Select(r => r.Key.GroupName) 
  • EntityFramework中的ObjectSet包含多less个可用于保持性能?
  • linq实体不承认一个方法
  • LINQ to Entities减去2个date
  • 如何做像SQL LINUX中的%?
  • 如何做批量插入 - Linq的实体
  • “带有语句正文的lambdaexpression式不能转换为expression式树”
  • Linq to Entitiesjoinvs groupjoin
  • 像entity framework中的运算符一样?
  • entity framework:查询子实体
  • 更新你的EDMX,以反映你的数据库(.net LINQ实体)
  • 如何使用存储过程DbContext.Database.SqlQuery <TElement>(sql,params)? EF代码第一CTP5