我想要选择列表中的第一个组。有没有更好的方法来做到这一点。
以下是我的表现:
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
答案 0 :(得分:1)
不需要ToLookup
。不同DateDetails
但matches
的查找组已经过滤到单个日期,因此只有一个组可供选择。
您可以跳过过滤器,然后选择:
var match = recordList.ToLookup(a => a.DateDetails).First()
lookaheadList = match.ToList();
然而,由于以下几个原因,这是多余的:
如果您没有存储ToLookup
的结果并使用它来按日期查找其他组,则无法创建查找对象 - 您可能刚刚使用过ToLookup
3}}
如果仅需要第一组,则根本不需要任何分组(GroupBy
或var firstDate = recordList.First().DateDetails;
var matches = recordList.Where(d => d.DateDetails == firstDate)
lookaheadList = matches.ToList();
)。
要直接抓取与第一个日期匹配的项目,请使用:
{{1}}
答案 1 :(得分:0)
答案 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是延期的