如何获得每个组使用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) 
  • 如何在数据库表的列中存储列表
  • LINQ to Entities不能识别该方法
  • 在EF 4.0中将string转换为Int
  • LINQ to Entities不支持指定的types成员。 仅支持初始化器,实体成员和实体导航属性
  • SQL到entity framework计数分组依据
  • 如何做像SQL LINUX中的%?
  • LINQexpression式中的String.IsNullOrWhiteSpace
  • Entity Framework 4 Single()vs First()vs FirstOrDefault()
  • dynamicLINQ可以注入吗?
  • entity frameworkVS LINQ to SQL VS ADO.NET与存储过程?
  • .ToList(),.AsEnumerable(),AsQueryable()之间有什么区别?