【发布时间】: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