表达

时间:2013-11-12 15:58:08

标签: c# linq lambda

如何构造包含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表达'

3 个答案:

答案 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));