如何构造包含OR?
的LINQ WHERE子句这是我的代码:
public static IQueryable<EmployeeObject> QueryableSQL()
{
IQueryable<EmployeeObject> queryable = EmployeeRepository.GetAllEmployee();
}
public static IList<EmployeeObject> QLike(Expression<Func<EmployeeObject, bool>> func)
{
return QueryableSQL().Where(func).ToList();
}
这样打电话:
QLike(t => t.Title == "stack" || t => t.Title == "over" || t => t.Title == "flow" ); <<<ERROR
或
QLike((t => t.Title == "stack") || (t => t.Title == "over") || (t => t.Title == "flow")); <<<ERROR
错误讯息:
运营商'||'不能应用于'lambda'类型的操作数 表达'和'lambda表达'
答案 0 :(得分:1)
该方法需要单个 lambda表达式,而不是多个表达式。您需要将||
运算符应用于各个布尔运算,如下所示:
QLike(t => t.Title == "stack" || t.Title == "over" || t.Title == "flow" );
答案 1 :(得分:1)
这样称呼:
QLike(t => t.Title == "stack" || t.Title == "over" || t.Title == "flow");
因为
t => t.Title == "stack"
是ONE func。
所以
(t => t.Title == "stack") || (t => t.Title == "over")
是两个函数,你在它们之间应用了一个运算符。这是错误的语法。
答案 2 :(得分:0)
您应该将单个lambda传递给方法。 Lambda表达式语法应如下所示:
lambda-parameters => lambda-expression-body
所以,这是正确的语法:
QLike(t => t.Title == "stack" || t.Title == "over" || t.Title == "flow" )
如果你要使用你正在寻找的标题的集合,BTW看起来你可以简化你的表达(取决于IQueryable
提供者是否可以翻译它,例如EF提供者将这样的表达式翻译成IN语句):
string[] titles = { "stack", "over", "flow" };
QLike(t => titles.Contains(t.Title));