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

C# Lambda表达式作为动态调度操作的参数,c#,linq,lambda,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 en

错误缠身:

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);
}

我如何才能做到这一点?

使用泛型,而不是
动态

private DbContext db;
private T test<T>(T entity)
    where T : BaseEntity
{
    return db.Set<T>().First(x => x.Id == entity.Id);
}
私有DbContext数据库;
私有T检验(T实体)
其中T:BaseEntity
{
首先返回db.Set()(x=>x.Id==entity.Id);
}

拥有一个具有
Id
属性的
BaseEntity
,以确保给定实体具有Id。

使用泛型来完成此操作,而不是
动态

private DbContext db;
private T test<T>(T entity)
    where T : BaseEntity
{
    return db.Set<T>().First(x => x.Id == entity.Id);
}
私有DbContext数据库;
私有T检验(T实体)
其中T:BaseEntity
{
首先返回db.Set()(x=>x.Id==entity.Id);
}

拥有一个具有
Id
属性的
BaseEntity
,以确保给定实体具有Id。

使用泛型来完成此操作,而不是
动态

private DbContext db;
private T test<T>(T entity)
    where T : BaseEntity
{
    return db.Set<T>().First(x => x.Id == entity.Id);
}
私有DbContext数据库;
私有T检验(T实体)
其中T:BaseEntity
{
首先返回db.Set()(x=>x.Id==entity.Id);
}

拥有一个具有
Id
属性的
BaseEntity
,以确保给定实体具有Id。

使用泛型来完成此操作,而不是
动态

private DbContext db;
private T test<T>(T entity)
    where T : BaseEntity
{
    return db.Set<T>().First(x => x.Id == entity.Id);
}
私有DbContext数据库;
私有T检验(T实体)
其中T:BaseEntity
{
首先返回db.Set()(x=>x.Id==entity.Id);
}


拥有一个具有
Id
属性的
BaseEntity
,以确保给定的实体具有Id。

您可以尝试您可以尝试您可以尝试您可以尝试是的,这解决了给定的示例,但我需要坚持使用dynamic。@想知道为什么要坚持使用dynamic?@想知道的可能性是您没有。它是为与动态语言进行互操作而设计的,而您并没有这样做。当使用EF时,它几乎肯定不是合适的工具。这是一个递归函数,我不知道下一次迭代的类型。实际问题在这里并不重要。我想了解如何在动态对象中使用lambla表达式。是的,这解决了给定的示例,但我需要坚持使用动态。@想知道为什么要坚持使用动态?@想知道的是,你没有。它是为与动态语言进行互操作而设计的,而您并没有这样做。当使用EF时,它几乎肯定不是合适的工具。这是一个递归函数,我不知道下一次迭代的类型。实际问题在这里并不重要。我想了解如何在动态对象中使用lambla表达式。是的,这解决了给定的示例,但我需要坚持使用动态。@想知道为什么要坚持使用动态?@想知道的是,你没有。它是为与动态语言进行互操作而设计的,而您并没有这样做。当使用EF时,它几乎肯定不是合适的工具。这是一个递归函数,我不知道下一次迭代的类型。实际问题在这里并不重要。我想了解如何在动态对象中使用lambla表达式。是的,这解决了给定的示例,但我需要坚持使用动态。@想知道为什么要坚持使用动态?@想知道的是,你没有。它是为与动态语言进行互操作而设计的,而您并没有这样做。当使用EF时,它几乎肯定不是合适的工具。这是一个递归函数,我不知道下一次迭代的类型。实际问题在这里并不重要。我想了解如何将lambla表达式用于动态对象。