Linq语句失败,带有动态where子句

时间:2013-01-31 13:40:09

标签: linq dynamic where-clause

我想要检索具有特定订单号的佣金。

这有效:

var expression = from commission in db.Auftraege 
                         where commission.Auftragsnummer == orderNbr
                         select new Commission() { EF_Commission = (commission as Auftrag) };

return expression.ToList();

但是,如果我将其转换为使用动态where子句(因为我想应用更多的过滤器),则似乎不应用where子句。而是返回所有佣金,而不是仅返回具有特定号码的佣金:

//base query
var expression = from commission in db.Auftraege select new Commission() { EF_Commission = (commission as Auftrag) };

//now add a where clause if the input parameter was specified
if (orderNbr >= 0)
    expression.Where(commission => commission.EF_Commission.Auftragsnummer == orderNbr);

 return expression.ToList();

我看过十几个例子,但他们似乎都是这样做的。有没有人知道为什么第二个查询忽略了where子句?

1 个答案:

答案 0 :(得分:1)

您需要临时expression分配给某些内容(可能是自身)。 expression.Where()不会更改现有查询 - 它会返回一个新查询。

所以:

expression = expression.Where(...);