1

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

这是一个例子,这是另一个例子。现在看看我的查询:

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 子句时,它无法识别我想要在哪里执行的字段......

有什么帮助吗?

这是我尝试添加的内容,而智能感知无法识别其中的任何内容:

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;
}
4

3 回答 3

1

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

于 2012-08-28T20:30:04.450 回答
1

.Where()接受一个表达式:

if (!String.IsNullOrEmpty(sc.Message))
    query = query.Where(elog => elog.Message.Contains(sc.Message));
于 2012-08-28T20:33:40.190 回答
0

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

where (elog.InstanceId == 4107 || elog.InstanceId == 4108)
于 2012-08-28T20:33:25.487 回答