我希望能够在LINQ查询中编写以下内容:
from item in list
collate by item.Property
select item;
Run Code Online (Sandbox Code Playgroud)
要使用此代码,我有以下方法:
public static IEnumerable<T> CollateBy<T,TKey>(
this IEnumerable<T> arr,
Func<T, TKey> keySelector)
{
foreach (var group in arr.GroupBy(keySelector))
{
foreach (var item in group)
yield return item;
}
}
Run Code Online (Sandbox Code Playgroud)
如何编写此方法以使上述查询起作用?
你不能这样做.from,in,by和select是C#的关键字.因此,您要求相当于定义自定义关键字,这是不可能的.
对于记录,在查询语法中编写的每个LINQ查询(如您提到的那样)都是在具有相同结果的方法调用中编译的.
例如以下查询:
var adultCustomers = from customer in customers
where customer.Age > 18;
Run Code Online (Sandbox Code Playgroud)
相当于以下查询:
var adultCustomers = customers.Where(customer=>customer.Age>18);
Run Code Online (Sandbox Code Playgroud)
在引擎盖下,编译器最初将第一个查询转换为第二个查询.第一个版本只是语法糖.
在您的情况下,您可能需要以下查询(方法语法):
var result = list.CollateBy(item => item.Property);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |