我想在Entity Framework Code First中做以下事情:
问题是.net编译
我找到了LinqKit库,它应该在这种情况下有所帮助,但我无法弄清楚如何在我的特定情况下应用它。对于简单的情况,当我只有像
有什么想法如何完成或者我可以在哪里阅读相关内容?
Data.GroupBy(x => x.Person.LastName)
.Select(x => x.OtherGrouping(...)).Where(...).GroupBy(...)...etc
public static class Extensions
{
public static IQueryable<IGrouping<T, T>> OtherGrouping<T>(this IQueryable<T> collection /**** Here I want to pass consts and lambdas\expressions*****/)
{
// Grouping, filtration and other stuff here
return collection.GroupBy(x => x);
}
}
问题是.net编译
OtherGrouping
方法时,它不像表达式一样表示,并且无法转换为SQL。我找到了LinqKit库,它应该在这种情况下有所帮助,但我无法弄清楚如何在我的特定情况下应用它。对于简单的情况,当我只有像
x => x+2
这样的表达式时,它可以正常工作,但我卡在了返回IQueryable上。可能可以完全手动编写表达式树,但我不想深入研究。有什么想法如何完成或者我可以在哪里阅读相关内容?
这是我根据Rob的评论尝试做的
void Main()
{
AddressBases.GroupBy(x => x.ParentId).Select(x => new {x.Key, Items = x.AsQueryable().OtherGrouping(a => a.Country) }).Dump();
}
public static class Extensions
{
public static IQueryable<IGrouping<TKey, TSource>> OtherGrouping<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector)
{
return source.Provider.CreateQuery<IGrouping<TKey, TSource>>(
source.GroupBy(keySelector).Expression);
}
}
我收到了一个异常:
NotSupportedException: LINQ to Entities does not recognize the method 'System.Linq.IQueryable`1[System.Linq.IGrouping`2[System.String,InsuranceData.EF.AddressBase]] OtherGrouping[AddressBase,String](System.Linq.IQueryable`1[InsuranceData.EF.AddressBase], System.Linq.Expressions.Expression`1[System.Func`2[InsuranceData.EF.AddressBase,System.String]])' method, and this method cannot be translated into a store expression.
我还无法确定为什么表达式树中有OtherGrouping方法?OtherGrouping方法只应该将另一个分组附加到表达式并将其传递给提供程序,而不是将自身放入树中。