2014-01-27 66 views
0

錯誤卡住:Lambda表達式作爲參數傳遞給動態調度操作

Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type 

舉個簡單的例子,讓我們嘗試使用實體框架實際上不知道它的類型從數據庫中獲取的對象:

private DbContext db; 
private dynamic test(dynamic entity) 
{ 
    return db.Set(entity.GetType()).First(x => x.Id == entity.Id); 
} 

我該如何做這項工作?

+0

你可以試試http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx –

回答

5

使用泛型要做到這一點,而不是dynamic

private DbContext db; 
private T test<T>(T entity) 
    where T : BaseEntity 
{ 
    return db.Set<T>().First(x => x.Id == entity.Id); 
} 

有一個BaseEntity有一個Id財產,以保證給定的實體有一個ID。

+0

是的,這解決了給定的例子,但我需要堅持動態。 – Wonder

+0

@Wonder爲什麼你想堅持動態? –

+0

@Wonder您不可以。它是專爲與動態語言交互而設計的,你不會這樣做。與EF一起工作時,它幾乎肯定不是工作的正確工具。 – Servy

相關問題