2014-01-27 106 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

相关问题