【问题标题】:Lambda expression as an argument to a dynamically dispatched operationLambda 表达式作为动态分派操作的参数
【发布时间】:2014-01-27 18:13:53
【问题描述】:

遇到错误:

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

我怎样才能做到这一点?

【问题讨论】:

标签: c# linq lambda


【解决方案1】:

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

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

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

【讨论】:

  • 是的,这解决了给定的示例,但我需要坚持使用动态。
  • @Wonder 为什么要坚持使用动态?
  • @Wonder 你不知道。它是为与动态语言互操作而设计的,而您并没有这样做。使用 EF 时,它几乎肯定不是适合这项工作的工具。
  • 这是一个递归函数,我不知道下一次迭代的类型。
  • 实际问题在这里并不重要。我想了解如何将lambla 表达式与动态对象一起使用。
猜你喜欢
  • 1970-01-01
  • 2013-06-09
  • 2017-09-18
  • 2017-10-08
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多