Linq选择第一组

时间:2014-07-22 11:49:46

标签: c# .net linq

我想要选择列表中的第一个组。有没有更好的方法来做到这一点。

以下是我的表现:

var match = (from m in recordList select m).FirstOrDefault();

var matches = recordList.Where(d => d.DateDetails == match.DateDetails);
var lookup = matches.ToLookup(a => a.DateDetails).First();

lookaheadList = lookup.ToList();

我正在选择第一个组并将其推送到名为lookaheadlist的第二个列表中。

我的数据如下:

DateDetails      Track Details 
0025              ABCD 
0025             EFGH 
0030               XXXXX 
0030               XXXXX

3 个答案:

答案 0 :(得分:1)

不需要ToLookup。不同DateDetailsmatches的查找组已经过滤到单个日期,因此只有一个组可供选择。

您可以跳过过滤器,然后选择:

var match = recordList.ToLookup(a => a.DateDetails).First()

lookaheadList = match.ToList();

然而,由于以下几个原因,这是多余的:

  • 如果您没有存储ToLookup的结果并使用它来按日期查找其他组,则无法创建查找对象 - 您可能刚刚使用过ToLookup 3}}

  • 如果需要第一组,则根本不需要任何分组(GroupByvar firstDate = recordList.First().DateDetails; var matches = recordList.Where(d => d.DateDetails == firstDate) lookaheadList = matches.ToList(); )。

要直接抓取与第一个日期匹配的项目,请使用:

{{1}}

答案 1 :(得分:0)

假设

  

group1 =" 025"

  

group2 =" 030"

我认为你错过了""

C# LINQ Query - Group By

答案 2 :(得分:0)

我建议您使用GroupBy

var match = (from m in recordList select m).FirstOrDefault();

var firstGroup= recordList.Where(d => d.DateDetails == match.DateDetails).GroupBy(x=> x.DateDetails).Select(x => x.First());

然后使用firstGroup变量来过滤这些元素

阅读this @Jon Skeet关于ILookup和IGrouping性能比较的答案

  

请记住,ToLookup是一个“立即行动”的操作(立即   执行)而GroupBy是延期的