使用LINQ TO实体与LINQKit时无法转换对象异常

时间:2013-10-25 11:46:28

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

我正在使用 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 ,用户 - DBSet

此代码抛出异常

  

无法投射类型的对象   输入'System.Linq.Expressions.FieldExpression'   'System.Linq.Expressions.LambdaExpression'

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

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

请帮帮我。

1 个答案:

答案 0 :(得分:1)

使用LinqKit,您必须通过Expression<Func<Int32, Boolean>> isMatched

Func<...>已经编译成C#运行时。

Expression<Func<...>>可以作为表达式树传递给SQL。