LINQ WHERE语句/忽略条件

时间:2011-09-17 18:42:11

标签: c# linq where ignore conditional-statements

如果参数为null或为空,我需要忽略WHERE语句中的部分或全部条件 F.E:

我有简单的LINQ查询

var query = from x in context.a
            where x.p == param1 && x.i == param2
            select x;

如果param1为null或emty,我如何忽略x.p == param1

修改

试过这个

var query = from myLog in myContext.ApsValidationLogs
            where (myLog.systemtype == comboBoxSystemType.SelectedItem.ToString() || string.IsNullOrEmpty(comboBoxSystemType.SelectedItem.ToString()))
              && (myLog.bankid == comboBoxBankId.SelectedItem.ToString() || string.IsNullOrEmpty(comboBoxBankId.SelectedItem.ToString())))
            select myLog;

但得到了

Object reference not set to an instance of an object.

如果第二个组合框的项目为空。怎么了?

2 个答案:

答案 0 :(得分:9)

您可以将其添加为条件:

 var query= from x in context.a 
            where String.IsNullOrEmpty(param1) || (x.p == param1 && x.i == param2)
            select x;

如果param1为空或空,则条件将始终为真,这有效地“忽略”了where条件。

答案 1 :(得分:5)

您可以单独检查param1param2这个..

var query = from x in context.a
             where (X.p==param1 || string.IsNullOrEmpty(param1))
             && (X.i==param2 || string.IsNullOrEmpty(param2))
             select x;

如果你想单独检查,上述两个条件也适用