我有一个包含许多重复记录的表。如何使用 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 个属性的匿名对象 StoreName
和 Address1
.
现在,可枚举中的每一项都是自身可枚举的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/