是否有某种方法可以简化对 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中GroupBy方法的使用总结(转载)

是否可以使用 LINQ 的 Skip 方法忽略列表项,然后在列表上应用 skip 而不会丢失该项目?

csharp 对排序输入没有真正有效的LINQ GroupBy()实现

Linq to Objects:GroupBy 是不是保留元素的顺序?

如何在dotnet core Entity Framework中对多个表的数据进行GroupBy操作?

无法访问 groupBy 数据 Linq C#