Linq to Select First Group

本文关键字:Group First Select to Linq | 更新日期: 2023-09-27 18:14:00

我想选择列表中的第一个组。有更好的方法吗?

我是这样做的:

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();

我选择第一个组,并将其推入第二个名为lookheadlist的列表。

My DATA如下:

DateDetails      Track Details 
0025              ABCD 
0025             EFGH 
0030               XXXXX 
0030               XXXXX

Linq to Select First Group

不需要ToLookup。查找组由不同的DateDetails,但matches已经被过滤到一个单一的日期,所以已经只有一个组选择。

你可以跳过过滤器,直接输入:

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

然而,这是多余的,原因如下:

  • 如果您不存储ToLookup的结果并使用它按日期查找其他组,则没有必要创建查找对象-您可以直接使用GroupBy。

  • 如果只需要第一组,则根本不需要任何分组(ToLookupGroupBy)。

直接获取与第一次约会匹配的项目,使用:

var firstDate = recordList.First().DateDetails;
var matches = recordList.Where(d => d.DateDetails == firstDate)
lookaheadList = matches.ToList();

假设

group1 = "025"

group2= "030"

我想你漏掉了一个"group by"

c# LINQ Query - Group By

我建议你使用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变量筛选

元素

阅读@Jon Skeet关于illookup和IGrouping性能比较的回答

请记住,查找是一个"立即执行"的操作(立即)执行),而GroupBy被延迟