对两个数据源的LINQ连接查询是抛出错误

时间:2014-08-05 07:28:18

标签: c# linq wmi

我想获取本地IList中提到的一些属性的WMI值。我通过从queryObj.Proerties中获取值来进行WMI查询并获取PropertyData []中的所有属性值。

我正在准备一个内部联接Linq查询,因为我只对我本地创建的列表中的属性名感兴趣,但它正在抛出NullrefernceException。模具Linq查询不能在数组上工作,或者我需要在访问此对象属性进行比较之前在Linq查询中初始化此PropertData对象?

请帮助我,因为我发现这很奇怪,浪费了很多时间。 以下是代码段:

    IDictionary<string, IList<string>> biosWmiAttributes = new Dictionary<string, IList<string>>();
                    biosWmiAttributes["Win32_BIOS"] = new List<string>{"Availability",
                                                            "BatteryStatus",
                                                            "Description",
                                                            "DeviceID",
                                                            "EstimatedRunTime",
                                                            "Name",
                                                            "Status",
                                                            "PowerManagementSupported"};

     ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_BIOS");
foreach (ManagementObject queryObj in searcher.Get())
{
                            bios = new Dictionary<string, string>();

                            StringBuilder biosCharacteristics = new StringBuilder();
                            PropertyData[] wmiAttributes = new PropertyData[100];
                            queryObj.Properties.CopyTo(wmiAttributes, 0);

var some = from biosAttribute in biosWmiAttributes["Win32_BIOS"]
                                   join wmiAttribute in wmiAttributes on biosAttribute equals wmiAttribute.Name into biosAttributes
                                   select new {Name=biosAttributes};
}

1 个答案:

答案 0 :(得分:2)

PropertyData[] wmiAttributes = new PropertyData[100];
queryObj.Properties.CopyTo(wmiAttributes, 0);

问题是,您在数组中分配100个元素,其中实际大小不是100.当Linq查询尝试访问您的数组时,您将获得NullReferenceException。 将其更改为以下内容:

PropertyData[] wmiAttributes = queryObj.Properties
                                       .Cast<PropertyData>()
                                       .ToArray();

另请查看What is a NullReferenceException, and how do I fix it?了解详情。