0

これは機能しません(0アイテム):

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

なんで ?

4

3 に答える 3

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();
}
于 2013-03-27T16:28:25.543 に答える
1

http://linq2wmi.codeplex.comでLinqToWmiプロジェクトを使用していると思います。その場合、公開されたバージョンは定数のみをサポートし、クエリ式の変数はサポートしません。(クエリは... where Description = 'theDescription' ...、結果を返す可能性が低いようなものを生成することになります。)

ただし、http://linq2wmi.codeplex.com/SourceControl/list/patchesにアクセスすると、誰かがこの問題を解決するためのパッチを送信したことがわかります。2009年に提出されましたが、承認されることはありません。

それ以来、公開されたソースにいくつかの小さな変更がありましたが、それらをマージすることはかなり簡単なはずです。

于 2013-03-27T18:31:41.507 に答える
-1

文字列とLINQの比較では、大文字と小文字が区別されます...

n.Descriptionが"hello"に等しく、theDescriptionが "HELLO"に等しい場合、n.Description==theDescriptionはfalseになります。

次のようなものを試してください

where string.Equals(n.Description, theDescription, StringComparison.OrdinalIgnoreCase)
于 2013-03-27T16:42:42.833 に答える