我有一个包含产品基本信息的xml文件,结构如下:
- products
- Id
- Price
- ManufacturerId
另一个,包含有关制造商的数据:
- manufacturers
- Id
- Name
我想使用LINQ从products.xml文件中获得产品数量最多的前三大制造商(制造商名称和产品数量)。
编辑: products.xml文件如下所示:
<products>
<row Id="1" Price="1.00" ManufacturerId="3"/>
<row Id="1" Price="0.99" ManufacturerId="2"/>
</products>
这些字段是产品和制造商文件的属性。
答案 0 :(得分: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");