我希望能够在LINQ查询中编写以下内容:
from item in list
collate by item.Property
select item;
要使用此代码,我有以下方法:
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;
}
}
如何编写此方法,以使上述查询正常工作?
答案 0 :(得分:7)
您不能这样做。 from
,in
,by
和select
是C#keywords。这样就要求您定义一个自定义关键字,这是不可能的。
为记录起见,在幕后用查询语法(如您提到的查询语法)编写的每个LINQ查询都是在具有相同结果的方法调用中编译的。
例如以下查询:
var adultCustomers = from customer in customers
where customer.Age > 18;
等同于以下查询:
var adultCustomers = customers.Where(customer=>customer.Age>18);
在后台,编译器最初将第一个查询转换为第二个查询。第一个版本只是语法糖。
在您的情况下,可能需要以下查询(方法语法):
var result = list.CollateBy(item => item.Property);