まず、WMIまたはLINQの使用についてはあまりよく知らないことを認めることから始めます。だから、私がこれほど苦労していることに誰もが驚かないと確信しています!
問題は、同じWMIオブジェクトから複数の値をクエリまたは返そうとしていることです。通常、これは悪くはありませんが、特定のデータセットに一致する要素のみを返す必要があるため、これに頭を悩ませることは難しいと感じています。問題は、最初に特定の要素または値についてWMIにクエリを実行してからクエリを再開し、その要素または値でフィルタリングして必要なデータセットを返す必要があることです。
WMIオブジェクト内のすべての要素をループして、それらをコレクションに追加できると確信しています。次に、探しているものが得られるまでコレクションをループしますが、それでも、余分な不要な要素をすべて除外するという問題があります。
ですから、私の質問は、WMIオブジェクトの高度な検索を行うための最良の方法と、探している情報を取得するのにそれほど時間がかからないようにプロセスを最適化するにはどうすればよいかということだと思います。
多くの検索で、LINQを使用している人々への言及がいくつか見つかりましたが、LINQへの露出が限られているため、この場合の使用方法がよくわからないため、ヘルプや洞察をいただければ幸いです。
これが私がこれまでに思いついたものです:
ManagementObjectSearcher searcher = new ManagementObjectSearcher
("SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=true");
IEnumerable<ManagementObject> objects = searcher.Get().Cast<ManagementObject>();
string description = (from o in objects orderby o["IPConnectionMetric"]
select o["Description"].ToString()).FirstOrDefault();
_NICINDEX = (from o in objects orderby o["IPConnectionMetric"]
select o["Index"].ToString()).FirstOrDefault();
_MACADDRESS = (from o in objects orderby o["IPConnectionMetric"]
select o["MACAddress"].ToString()).FirstOrDefault();
_IPADDRESS = (from o in objects orderby o["IPConnectionMetric"]
select o["IPAddress"].ToString()).FirstOrDefault();
_IPV6ADDRESS = (from o in objects orderby o["IPConnectionMetric"]
select o["IPAddress"].ToString()).FirstOrDefault();
_SUBNETMASK = (from o in objects orderby o["IPConnectionMetric"]
select o["IPSubnet"].ToString()).FirstOrDefault();
_GATEWAY = (from o in objects orderby o["IPConnectionMetric"]
select o["DefaultIPGateway"].ToString()).FirstOrDefault();
_DNSSERVER = (from o in objects orderby o["IPConnectionMetric"]
select o["DNSServerSearchOrder"].ToString()).FirstOrDefault();
_DNSSECSVR = (from o in objects orderby o["IPConnectionMetric"]
select o["DNSServerSearchOrder"].ToString()).FirstOrDefault();
return description;