2012-08-28 143 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)