是否有某种方法可以简化对 LINQ GroupBy 查询中组的第一个成员的访问?
Posted
技术标签:
【中文标题】是否有某种方法可以简化对 LINQ GroupBy 查询中组的第一个成员的访问?【英文标题】:Is there some way to simplify access to the first member of a group in a LINQ GroupBy query? 【发布时间】:2021-08-27 09:50:15 【问题描述】:我有以下通过站点收集结果的 LINQ 语句:
var groupedSites = ungroupedSites.AsEnumerable()
.GroupBy(_ => _.s.SiteUid)
.Select(g => new MySites
Title = g.First().sd.Title,
Classification = g.First().s.Classification,
Service = g.First().p.ServiceGateway,
etc.
);
“MySites”的初始化程序中还有十几个使用 g.First() 的属性。有没有更好的方法(比 g.First())我可以访问该组的第一项?理想情况下,最好有一个变量:
var first = g.first()
然后使用它。
【问题讨论】:
是的,使用查询语法和let
。
@GertArnold 或使用Select
将查询语法let
转换为流畅的语法以创建新的匿名类型。
是的,但是let
具有变量的外观和感觉。
【参考方案1】:
你可以通过额外的Select
来做到这一点:
var groupedSites = ungroupedSites.AsEnumerable()
.GroupBy(_ => _.s.SiteUid)
.Select(g => g.First())
.Select(f => new MySites
Title = f.sd.Title,
Classification = f.s.Classification,
Service = f.p.ServiceGateway,
etc.
);
【讨论】:
以上是关于是否有某种方法可以简化对 LINQ GroupBy 查询中组的第一个成员的访问?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 LINQ 的 Skip 方法忽略列表项,然后在列表上应用 skip 而不会丢失该项目?
csharp 对排序输入没有真正有效的LINQ GroupBy()实现
Linq to Objects:GroupBy 是不是保留元素的顺序?