试图理解LINQ方法表示法

时间:2015-11-12 20:26:09

标签: c# linq

我试图更好地理解LINQ方法符号。

说我有一个DataTable:

DataTable table = new DataTable("Products");
            table.Columns.Add("ProductID", typeof(int));
            table.Columns.Add("ProductName", typeof(string));
            table.Columns.Add("Category", typeof(string));
            table.Columns.Add("UnitPrice", typeof(decimal));
            table.Columns.Add("UnitsInStock", typeof(int));

假设从DataTable加载变量产品(" Products")

var products = testDS.Tables["Products"].AsEnumerable();

所以我知道我可以进行如下查询:

var productNameGroups = words4.GroupBy(x => x.Field<string>("ProductName").Substring(0, 1)).Select(x => new { FirstLetter = x.Key, Words = x});

var productGroups = products.GroupBy(p => p.Field<string>("Category")).Select(x => new { Category = x.Key, Products = x });

我在Select方法中抓住x.Key时遇到了麻烦。我不确定它的设置或我何时可以/不能使用它。

1 个答案:

答案 0 :(得分:2)

x.Key特定于处理GroupBy方法的结果。

当你这样做时

var res = someData.GroupBy(item => item.Property);

结果是IEnumerable IGrouping<K,V> - 键/值对,其中Key属性表示项目分组的Property值。

因为在您的情况下,分组是在代表ProductNameProductCategory的第一个字母的字符串上完成的,所以当您在返回的每个组中引用x.Key时,这就是您所获得的通过查询。