我使用LinqKit.dll做Linq到實體在我的應用程序的對象,如下:無法投型「System.Linq.Expressions.FieldExpression」
qry = _articleRepo.GetItemsByCulture(Thread.CurrentThread.CurrentCulture.Name)
.AsExpandable().Where(x => x.Approved && isInCategory(x.CategoryID, category.CategoryID));
Func<string, int, bool> isInCategory = (x, y) =>
{
IQueryable<string> list = x.Split(',').AsQueryable();
//Except
//x.Except(_);
return list.Any(z => z == y.ToString());
};
它給我的錯誤:
System.InvalidCastException:無法投射類型爲 'System.Linq.Expressions.FieldExpression'的對象以鍵入 'System.Linq.Expressions.LambdaExpression'。
但刪除isInCategory(x.CategoryID,category.CategoryID)會導致應用程序運行時沒有問題。
請幫我嗎?
簡短回答:沒有辦法使這項工作。因爲你的方法不能被轉換成SQL。通常的做法是使用SQL函數並將其映射到應用程序,但只有在您使用EDMX進行映射時纔可能。 –
它看起來很奇怪,但買了使用工作單元模式,我的應用程序現在正常工作。 –
我無法確定這是否是你的問題(這就是爲什麼這不是答案),但如果isInCategory不是局部變量,那麼你會得到這個錯誤。如果不是,則在'qry'行之前添加一行,表示'var expression = isInCategory;',然後在'qry'行中使用'expression'。 – DCShannon