2010-01-17 1 views
2

를 사용하여 XML에서 재발의 최대 금액을 받기다음과 같은 구조로, 나는 제품에 대한 기본 정보를 포함하는 XML 파일이 LINQ

- manufacturers 
    - Id 
    - Name 

LINQ를 사용하는 products.xml 파일에서 가장 많은 제품 (제조업체 이름 및 제품 수)을 가진 상위 3 개 제조업체를 얻고 싶습니다.

편집 : products.xml 파일은 다음과 같다 :

<products> 
    <row Id="1" Price="1.00" ManufacturerId="3"/> 
    <row Id="1" Price="0.99" ManufacturerId="2"/> 
</products> 

필드는 모두 제품 및 제조 업체 파일의 속성입니다.

답변

2

음, 을 찾을 수 있습니다. 제조업 자들은 누구인가는 몰라도 가장 상위에 있습니다. 그런 다음 두 번째 쿼리에서 세부 정보를 가져올 수 있습니다.

예를 들어 제조업체 ID가 특성인지 요소인지 알 수없는 예제 XML을 표시하면 도움이됩니다. 하지만 다음과 같은 형식이 될 것입니다 :

var top3Ids = products.Elements("row") 
         .GroupBy(x => (string) x.Attribute("ManufacturerId")) 
         .Select(group => new { Id = group.Key, 
              Count = group.Count() }) 
         .OrderByDescending(x => x.Count) 
         .Select(x => x.Id) 
         .Take(3) 
         .ToList(); 

var top3 = from element in manufacturers.Elements("row") 
      where top3Ids.Contains((string) element.Attribute("Id")) 
      select (string) element.Attribute("Name"); 
+0

빠른 답변 감사합니다! 샘플 xml 파일을 추가했습니다. 기본적으로해야 할 일은'x.Element ("ManufacturerId")'를'x.Attribute ("ManufacturerId")'로 대체하는 것입니다. 맞습니까? – alex

+0

거의 편집 중입니다. –

+0

두 번째 부분은 그대로 작동하지 않습니다. 대신에 다음과 같이 사용했습니다 : var top3 = from 요소의 요소 .Element ("row") top3Ids.Any (x => x.Id == (string) element.Attribute ("Id")) select (string) 요소 .Attribute ("Name"); ' – alex