2013-03-27 79 views
0

這不起作用(0項):爲什麼Linq-to-WMI'where query`不工作?

var cfg = from n in context.Source<Win32_NetworkAdapterConfiguration>() 
    where n.Description == theDescription 
    select n; 

但這:

var cfg = new List<Win32_NetworkAdapterConfiguration>(); 

var x = from n in context.Source<Win32_NetworkAdapterConfiguration>() 
    select n; 

foreach (var i in x) { if (i.Description == theDescription) cfg.Add(i); } 

爲什麼?

回答

1

我相信你是用LINQ to WMI項目在http://linq2wmi.codeplex.com。 如果是這樣,那麼發佈的版本僅支持常量,而不支持查詢表達式中的變量。 (您的查詢最終會產生類似... where Description = 'theDescription' ...這不太可能會返回任何結果。)

但是,如果你去http://linq2wmi.codeplex.com/SourceControl/list/patches你會看到有人提交了一個補丁來解決這個問題。它在2009年提交,但從未被接受。

從那時起,對發佈的源代碼進行了一些小修改,但合併它們應該相當簡單。

1

我想這與LINQ的數據綁定時間和WMILinq中使用的實現有關。您可以聯繫該圖書館的作者。

或者你可以試試這個:

void Main() 
{ 
    string filter = "WAN Miniport (SSTP)"; 
    string qry = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE description = '" + filter + "'"; 
    ManagementObjectSearcher r = new ManagementObjectSearcher(qry); 
    var items = r.Get(); 
} 
-1

字符串與LINQ比較是區分大小寫的...

如果n.Description等於 「你好」 和theDescription等於 「HELLO」,n.Description = =說明將是錯誤的。

嘗試像

where string.Equals(n.Description, theDescription, StringComparison.OrdinalIgnoreCase) 
+0

???你是說/建議比較字符串與C#**不是**區分大小寫...... – sgmoore 2013-03-27 17:07:56

+0

沒有抱歉,它是區分大小寫的,我沒有注意到在代碼片段的foreach循環中的比較工作。 – JCorriveau 2013-03-28 15:30:23