2

如何构造包含 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 表达式”类型的操作数


方法中的 if 语句

我在 C# 中设置了一个变量,该变量根据选择的 If 语句而变化。

但是当我尝试 Console.WriteLine 变量时,它告诉我该变量在当前上下文中不存在,有人可以帮我解决这个问题吗?

public void mood()
{
  var unhappiness = Hunger + Boredom;

  if (unhappiness < 5)
  {
    string m = "Happy";
  }

  if (unhappiness <= 5 && unhappiness <= 10)
  {
    string m = "Okay";
  }

  if (unhappiness <= 11 && unhappiness <= 15)
  {
    string m = "Frustrated";
  }

  if (unhappiness <= 16)
  {
    string m = "Mad";
  }

  Console.WriteLine(m);
}

变量“m”是我遇到的问题。

4

3 回答 3

1

该方法需要一个lambda表达式,而不是多个表达式。您需要将||运算符应用于各个布尔运算,如下所示:

QLike(t => t.Title == "stack" || t.Title == "over" || t.Title == "flow" ); 
于 2013-11-12T15:59:17.537 回答
1

这样称呼它:

QLike(t => t.Title == "stack" || t.Title == "over" || t.Title == "flow");

因为

t => t.Title == "stack" 

是一个功能。

所以

(t => t.Title == "stack") || (t => t.Title == "over") 

是两个函数,并且您在它们之间应用了一个运算符。这是错误的语法。

于 2013-11-12T15:59:17.830 回答
0

您应该将单个 lambda 传递给方法。Lambda 表达式语法应如下所示:

lambda-parameters => lambda-expression-body

所以,这是正确的语法:

QLike(t => t.Title == "stack" || t.Title == "over" || t.Title == "flow" )

顺便说一句,如果您将集合用于您正在寻找的标题,您似乎可以简化您的表达式(取决于IQueryable提供者是否可以翻译这个,例如 EF 提供者将这些表达式翻译成 IN 语句):

string[] titles = { "stack", "over", "flow" };
QLike(t => titles.Contains(t.Title));
于 2013-11-12T15:59:22.823 回答