[英]Linq query to return distinct values in xml
我有一个具有以下结构的XML:
<Categories>
<Category>
<Books>
<Book>
<BookId>1</BookId>
<BookQuantity>150</BookQuantity>
</Book>
<Book>
<BookId>2</BookId>
<BookQuantity>250</BookQuantity>
</Book>
</Books>
</Category>
<Category>
<Books>
<Book>
<BookId>1</BookId>
<BookQuantity>150</BookQuantity>
</Book>
<Book>
<BookId>3</BookId>
<BookQuantity>250</BookQuantity>
</Book>
</Books>
</Category>
</Categories>
我正在尝试检索类别中具有数量的每本不同的图书。 输出为:
Book 1 300
Book 2 250
Book 3 250
任何执行此操作的最佳方法。 我尝试使用linq查询,但无法成功。
您可以使用Linq到Xml 。 查询很简单-只需选择所有Book元素,然后按BookId元素的值对它们进行分组。 然后将每个组投影到匿名对象或书籍类实例中:
var xdoc = XDocument.Load(path_to_xml);
var books = from b in xdoc.Root.Descendants("Book")
group b by (int)b.Element("BookId") into g
select new {
Id = g.Key,
Quantity = g.Sum(b => (int)b.Element("BookQuantity"))
};
结果:
[
{ "Id": 1, "Quantity": 300 },
{ "Id": 2, "Quantity": 250 },
{ "Id": 3, "Quantity": 250 }
]
除了创建匿名对象,您还可以创建Book类的实例:
public class Book
{
public int Id { get; set; }
public int Quantity { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.