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

duy*_*yen 5 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
Run Code Online (Sandbox Code Playgroud)

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

我只想要这两个记录:

1, CVS, 123 Main Street
3, CVS, 456 Main Street
Run Code Online (Sandbox Code Playgroud)

我尝试使用匿名对象,但无法弄清楚如何在不按 ID 分组的情况下获取 ID。

Jam*_*iec 5

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

因此你会像这样分组

 var grouped = myList.GroupBy(x => new {x.StoreName,x.Address1});
Run Code Online (Sandbox Code Playgroud)

这会给你一个可枚举的列表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
                                });
Run Code Online (Sandbox Code Playgroud)