在linq查询中添加where子句

时间:2012-08-28 20:26:36

标签: c# linq

我找到了如何“动态”在linq查询中添加更多where子句的示例,但我不确定如何使其与我的特定查询一起使用。

这是one examplehere's another。现在来看看我的查询:

var result = (from EventLogEntry elog in el.Entries
              where (elog.InstanceId == 4107)
              orderby elog.TimeGenerated descending
              select elog).ToList();

var query = from EventLogEntry elog in el.Entries
            orderby elog.TimeGenerated descending
            select elog;

第一个示例显示了硬编码InstanceID == 4107,但我希望能够添加更多where子句。我见过的所有例子都说:

query = query.Where(el.Entries => el.Entries.Message.Contains("error"));

或类似的东西。但我的查询是将“源”定义为EventLogEntry对象,所以当我尝试扩展where子句时,它无法识别我想要在哪里执行的字段....

对此有何帮助?

这是我试图添加的内容,而intellisense无法识别任何内容:

if (!String.IsNullOrEmpty(sc.Message))
    query = query.Where(elog.Message.Contains(sc.Message));

更新(这是工作版本):

var query = from EventLogEntry elog in el.Entries select elog;

try
{
    if (!String.IsNullOrEmpty(sc.Message))
        query = query.Where(elog => elog.Message.Contains(sc.Message));

    query = query.OrderBy(elog => elog.TimeGenerated);

    var result = query.ToList();
}
catch
{
    throw;
}

3 个答案:

答案 0 :(得分:1)

其中只取一个布尔结果表达式。你可以使用ands,ors,比较器,甚至是数学方程式。只需使用逻辑运算符来扩展括号内的表达式。

答案 1 :(得分:1)

.Where()采用表达式:

if (!String.IsNullOrEmpty(sc.Message))
    query = query.Where(elog => elog.Message.Contains(sc.Message));

答案 2 :(得分:0)

您可以添加更多表达式,就像使用if:

一样
where (elog.InstanceId == 4107 || elog.InstanceId == 4108)