扩展LINQ的选项

时间:2018-07-08 14:13:44

标签: c# .net linq

我希望能够在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;
    }
}

如何编写此方法,以使上述查询正常工作?

1 个答案:

答案 0 :(得分:7)

您不能这样做。 frominbyselect是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);