2010-10-04 69 views
1

我的C#.NET 2.0的应用程序执行使用ManagementObjectSearcher类两个查询:C#.NET ManagementObjectSearcher查询

_searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSWmi_PnPInstanceNames"); 

_searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSSerial_PortName"); 

我想将它们结合起来,使_searcher包含了所有来自两个查询的结果。但是,当我尝试这样做时...

_searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSWmi_PnPInstanceNames AND MSSerial_PortName"); 

...引发“无效查询”异常。有没有人有任何想法可以让我做这项工作?谢谢。

+1

这不会是写在任何SQL方言,我能想到的查询理智的方式。如果'select'语句返回相同的rowtype,你可以尝试运行这两个选择的'union'(不知道这是否可以和wmi一起工作)。 – ChristopheD 2010-10-04 20:15:40

回答

1

不幸的是,WMI查询语言不支持joinunion操作,所以你必须单独运行这些查询(因为从不同的对象存储的选择)。

WMI查询语言(WQL)是ANSI SQL的一个子集 - 有一些语义变化。并非所有可以在SQL中执行的操作都可以在WQL中完成。您可以在MSDN上在线查看WMI supported query constructs

0

我能够与多个表查询运行如下图所示

ManagementObjectSearcher searcher; 
query = new ObjectQuery(string.Format("Select SMS_CollectToSubCollect.subCollectionID,SMS_Collection.Name " + 
             " from SMS_CollectToSubCollect, SMS_Collection " + 
             " where subCollectionID in " + 
             " (select CollectionID from SMS_Collection where name='{0}') " + 
             " and SMS_Collection.CollectionID = SMS_CollectToSubCollect.parentCollectionID " , name)); 
foreach (ManagementObject queryObj in searcher.Get()) 
{ 
//TODO:read values from results 
} 

希望这有助于