c# - Linq 查询按多列分组但获取其他属性

标签 c# linq group-by

我有一个包含许多重复记录的表。如何使用 C# Linq 查询按多个字段分组,同时获取不同记录的 ID。

例如:我有一个像这样的 Store 表

Store
-----
ID, StoreName, Address1

1, CVS, 123 Main Street
2, CVS, 123 Main Street
3, CVS, 456 Main Street

我想先按 storeName 分组,然后按 address1 分组,但还要获取第一个不同(storeName 和 address1)记录的 ID。

我只想要这两条记录:

1, CVS, 123 Main Street
3, CVS, 456 Main Street

我尝试使用匿名对象,但不知道如何在不按 ID 分组的情况下获取 ID。

最佳答案

当您使用 GroupBy 时在 LINQ 中,您将获得一个实现接口(interface) IGrouping<TKey,TElement> 的类的可枚举数- TElement代表已分组的单个原始元素。

所以你会这样分组

 var grouped = myList.GroupBy(x => new {x.StoreName,x.Address1});

这将为您提供 IGrouping<anonymous,Store> 的可枚举列表(假设原始对象称为 Store )。 anonymous是一个具有 2 个属性的匿名对象 StoreNameAddress1 .

现在,可枚举中的每一项都是自身可枚举的Store ,您可以像对待任何其他可枚举对象一样对待它 - 您可以采用 First().ID如果你愿意的话,你可以把所有的东西都投影回一个可枚举的,如果那是你想要的话

var result = myList.GroupBy(x => new {x.StoreName,x.Address1});
                   .Select(g => new {
                                  g.Key.StoreName, 
                                  g.Key.Address1, 
                                  FirstID = g.First().ID
                                });

关于c# - Linq 查询按多列分组但获取其他属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33653340/

相关文章:

c# - 尝试从字符串创建 Material - 这不再受支持

c# - C#的稍微复杂的linq

c# - Linq GroupBy。返回数据子集的前一项

mysql - 连接3个表并对不同字段进行计数

c# - 为什么不是所有国家都出现在 CultureInfo.GetCultures() 中?

c# - 如何使用Shuffling提高rng?

c# - ReliabilityContract 和 IComparer(或其他注入(inject)代码)

c# - Entity Framework 中的意外行为

c# - @Html.Action 正在从部分 View 镜像我的网站,而不引用布局页面?

python - Pandas groupby 获取另一列最小的列的值