2012-08-28 142 views
0

我发现了如何“动态”添加where子句到linq查询的例子,但我不知道如何使它适用于我的特定查询。添加where子句linq查询

这是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子句时,它不能识别我想要在哪里做的字段......

任何帮助有了这个?

这是我试图添加,和智能不承认它的任何:

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

'所以当我尝试和延伸where子句,这不是”我不知道我想要做什么的领域我可以在哪里做1)你能显示你尝试的确切代码吗? 2)你能显示你得到的确切错误吗? –

+0

你能详细说明吗?_“但我的查询是设置定义”来源“作为EventLogEntry对象”_显示你的意思(伪代码可以阐明你的要求)。 –

+0

@TimSchmelter检查出第一个“var result =(来自elLog中的EventLogEntry elog,其中......) – ganders

回答

1

.Where()需要的表达式:

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

我收到错误:无法将IEnumerable 类型转换为IOrderedEnumerable 。存在明确的转换,你是否缺少演员?让我试试更多的调整.... – ganders

+2

做好你的订单后,你建立你的条件 –

+0

嗯,把它改回这个答案摆脱了我的例外....感谢jrummell – ganders

1

如果只是需要一个布尔结果表达。你可以使用和,或者,比较器,甚至是数学方程。只需使用逻辑运算符来扩展括号内的表达式即可。

0

您可以添加更多的表达只是当你使用的是如果想:

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