2013-03-27 2 views
0

이 작동하지 않습니다 (0 항목) :Linq-WMI 'where` 쿼리가 작동하지 않는 이유는 무엇입니까?

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

이유는 무엇입니까?

답변

1

같은 당신이 http://linq2wmi.codeplex.com에서 Linq는 WMI으로 프로젝트를 사용하는 가정을보십시오. 그렇다면 게시 된 버전은 쿼리 식에서 변수가 아닌 상수 만 지원합니다. (검색어가 ... where Description = 'theDescription' ...과 같이 생성되어 결과를 반환하지 않을 것입니다.)

http://linq2wmi.codeplex.com/SourceControl/list/patches으로 이동하면 누군가가이 문제를 해결하기위한 패치를 제출했음을 알 수 있습니다. 2009 년에 제출되었지만 결코 받아 들여지지 않았습니다.

게시 된 출처에는 약간의 변경 사항이 있지만 그 이후에는 병합하는 것이 매우 간단합니다.

1

이것은 LINQ가있는 데이터와 WMILinq에서 사용 된 구현의 바인딩 시간과 관련이 있다고 생각합니다. 해당 도서관의 저자에게 연락 할 수 있습니다.

또는 당신이 시도 할 수 있습니다 : LINQ와 문자열 비교

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

은 대소 문자를 구분을 ...

n.Description 같음 "안녕하세요"와 theDescription은 "HELLO"동일한 경우, n.Description = = theDescription은 false가됩니다.

where string.Equals(n.Description, theDescription, StringComparison.OrdinalIgnoreCase) 
+0

??? C# **과 문자열을 비교하는 것이 대소 문자를 구분하지 않는다고 말하고 있습니까? – sgmoore

+0

대소 문자를 구분하지 않으므로 작동하는 코드 단편의 foreach 루프에서 비교를 알 수 없습니다. – JCorriveau

관련 문제