Lambda表达式作为动态调度操作的参数

时间:2014-01-27 18:13:54

标签: c# linq 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);
}

我该如何做到这一点?

1 个答案:

答案 0 :(得分: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。