我有一個泛型類型過濾器,它需要一些lambda表達式來從類型中選擇值以便該類可重用。該類用於另一個泛型類Search中,它將使用Filter來選擇最終將在下拉列表中使用的不同類型的項目。在linq select語句中用func選擇匿名類型的值
我刪除了這些不重要的代碼。
public class Filter<T>
{
public string Name;
public Func<T, string> Key;
public Func<T, string> Value;
}
public class Search<T>
{
MyDBContext db = new MyDBContext();
IQueryable<T> Model = db.Stuff.OrderBy(a => a.TermID);
Filter filter = new Filter(
Name: "Term",
Value: a => a.TermID.ToString(),
Key: a => a.Term.TermType.Name
);
var filterItems = Model
.Select(a => new { Key = filter.Key(a), Value = filter.Value(a)})
.OrderBy(t => t.Key)
.Distinct()
.ToArray();
}
我得到的運行時錯誤:The LINQ expression node type 'Invoke' is not supported in LINQ to Entities.
我一直在使用強類型而不是匿名類型,並在過濾器使用Expression<Func<T,string>>
嘗試。
經過數小時的搜索和嘗試不同的事情,我不知道如何使這項工作。 謝謝你的幫助。
我懷疑無論'filter.Key'和'filter.Value'是否可以從LINQ轉換到您的後端存儲。 – mellamokb 2012-07-23 21:51:49
如果Invoke是主要問題,那麼可以通過使用ExpressionVisitor來融合這兩個表達式來避免。我不在PC上,但如果你沒有得到任何喜悅,請提醒我,我會添加一個例子。 – 2012-07-23 22:14:41