【问题标题】:Unable to cast object exception while using LINQ To Entities with LINQKit将 LINQ To Entities 与 LINQKit 一起使用时无法强制转换对象异常
【发布时间】:2013-11-04 12:29:15
【问题描述】:

我正在使用 LINQKit 来扩展 LINQ To Entities 功能:

public Boolean IsMatched(Int32 age)
{
    return age > 18;
}

public IQueryable<Users> GetAllMatchedUsers(Func<Int32, Boolean> isMatched)
{
    return qry = _Context.Users.AsExpandable().Where(x => x.IsActive && isMatched(x.Age));
}

此代码用于Entity Framework ORM对象(_Context是DbContext,Users - 是DBSet

此代码引发以下异常

无法转换类型的对象 'System.Linq.Expressions.FieldExpression' 键入 'System.Linq.Expressions.LambdaExpression'

摆脱 Func 并将 IsMatched 硬编码为 GetAllMatchedUsers 解决了这个问题。但我需要使用 Func 将不同的选择标准从 业务逻辑层 传递到我的 数据访问层

P。 S. IsMatched 是高度简化的实现,例如当然

请帮帮我。

【问题讨论】:

  • 您的代码中是否还缺少参数名称,还是就在这里?
  • 就在这里 :) 我已经更正了我的代码示例..
  • 添加了更多关于 _Context 和用户是什么的信息
  • 你为什么使用AsExpandable?这对我来说似乎是多余的。为什么Where 子句不够用?
  • AsExpandable 是 LINQKit 扩展方法。没有它会引发另一个异常,它告诉我 LINQ to Entities 不支持 Invoke。我希望 AsExpandable 能够解决这个问题(据我了解 LINQKit 文档) - 但我失败了并在这里描述了我的代码......

标签: c# linq entity-framework linq-to-entities linqkit


【解决方案1】:

使用 LinqKit,您必须通过 Expression&lt;Func&lt;Int32, Boolean&gt;&gt; isMatched

Func&lt;...&gt; 是已经编译到 C# 运行时的东西。

Expression&lt;Func&lt;...&gt;&gt; 可以作为表达式树传输到 SQL。

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多