c# - 尝试理解 LINQ 方法表示法

标签 c# linq

我正在尝试更好地理解 LINQ 方法符号。

假设我有一个数据表:

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。我不确定它是如何设置的或者我什么时候可以/不能使用它。

最佳答案

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

当你这样做时

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

结果是 IEnumerableIGrouping<K,V> - 键/值对,其中Key属性代表 Property 的值项目在其上进行分组。

因为在您的情况下,分组是在代表 ProductName 的第一个字母的字符串上完成的。或ProductCategory ,这就是您引用 x.Key 时得到的结果在查询返回的每个组中。

关于c# - 尝试理解 LINQ 方法表示法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33680667/

相关文章:

c# - 如何转换日期时间?到日期时间

c# - 更改 C# 排序行为

c# - 查询 EDMX 中的多对多联接表

linq - 学习 LINQ 的资源?

c# - 字符串在c#中动态分割

c# - 如何拥有一个带有 json 动态成员的 WCF DataContract

c# - 如何让 Label 显示带有不同颜色字母的 FormattedString?

c# - 如何访问维基百科

c# - 如何使用连接从 linq 结果中获取所有列

c# - Lambda 表达式的工作原理