我願做以下的事情在實體框架代碼首先:內蒙古方法
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的Stucked。大概可以用手完全寫出表達樹,但我不想太深入。
任何想法如何做或我可以在哪裏讀到它?
這裏是我試圖根據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方法應該只是將另一個分組附加到表達式並將其傳遞給提供者,但不會將其自身放到樹中。
你會需要調用集合的查詢提供電話取代它。看一看[這裏](https://github.com/Microsoft/referencesource/blob/master/System.Core/System/Linq/IQueryable.cs#L90)作爲例子。 – Rob
感謝@Rob,看看LINQ源代碼是個好主意。我試圖在EF來源和錯誤中找到我的愚蠢原因。我會立即嘗試,也許你可以發佈答案而不是評論,所以我可以接受它,它會變得更加明顯爲其他人 – Neir0