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

Won*_*der 0 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
Run Code Online (Sandbox Code Playgroud)

举一个简单的例子,让我们尝试使用实体框架从数据库中获取一个对象,而不是实际知道它的类型:

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

我怎样才能做到这一点?

Ser*_*rvy 5

使用泛型来执行此操作,而不是dynamic:

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

有一个BaseEntity具有一个Id特性,以确保给定的实体有一个ID.

  • 实际问题在这里并不重要.我想了解如何将lambla表达式与动态对象一起使用. (7认同)