我找到了如何“动态”在linq查询中添加更多where子句的示例,但我不确定如何使其与我的特定查询一起使用。
这是one example和here'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;
}
答案 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)