2010-01-17 91 views
2

我有一個包含關於產品的基本信息的XML文件,具有以下結構的XML復發的最高金額:獲取使用LINQ

- products 
    - Id 
    - Price 
    - ManufacturerId 

而另外一個,約含廠商數據:

- 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

那麼,你可以找到其中製造商是最重要的沒有看他們是誰。然後您可以在第二個查詢中獲取詳細信息。

例如,如果您要顯示一些示例XML(例如,我們不知道製造商ID是屬於某個屬性還是元素),這將有所幫助。但它會是這樣的:

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.Attribute(「ManufacturerId」)'替換'x.Element(「ManufacturerId」)',對吧? – alex 2010-01-17 07:53:05

+0

差不多......現在編輯。 – 2010-01-17 08:32:04

+0

第二部分不按原樣工作。我用這個代替:'var top3 = from manufacturer.Elements(「row」)中的元素其中top3Ids.Any(x => x.Id ==(string)element.Attribute(「Id」))select(string)element .Attribute(「Name」);' – alex 2010-01-17 11:16:54