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

我假设您正在使用http://linq2wmi.codeplex.com上的 Linq To Wmi 项目。如果是这样,那么发布的版本只支持常量而不支持查询表达式中的变量。(您的查询最终会生成类似... where Description = 'theDescription' ...不太可能返回任何结果的内容。)

但是如果你去http://linq2wmi.codeplex.com/SourceControl/list/patches你会看到有人提交了一个补丁来解决这个问题。它于 2009 年提交,但从未被接受。

从那时起,已发布的源代码发生了一些细微的变化,但合并它们应该是相当简单的。

于 2013-03-27T18:31:41.507 回答
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

用 LINQ 比较字符串是区分大小写的......

如果 n.Description 等于“hello”并且 theDescription 等于“HELLO”,则 n.Description == theDescription 将为 false。

尝试类似的东西

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