【发布时间】:2017-01-26 07:53:19
【问题描述】:
您好,我有一个包含书籍详细信息的 xml。 xml的结构是-
<Root>
<Books>
<Book>
<BookId>1</BookId>
<Title>Book 1</Title>
<LanguageId>1</LanguageId>
<Genres>2,3</Genres>
<BookType>1</BookType>
<Description>Lorem Ipsum</Description>
</Book>
<Book>
<BookId>3</BookId>
<Title>Book 3</Title>
<LanguageId>3</LanguageId>
<Genres>12,23</Genres>
<BookType>2</BookType>
<Description>Lorem Ipsum</Description>
</Book>
<Book>
<BookId>3</BookId>
<Title>Book 2</Title>
<LanguageId>2</LanguageId>
<Genres>1,13</Genres>
<BookType>2</BookType>
<Description>Lorem Ipsum</Description>
</Book>
<Book>
<BookId>4</BookId>
<Title>Book 4</Title>
<LanguageId>2</LanguageId>
<Genres>1,13</Genres>
<BookType>2</BookType>
<Description>Lorem Ipsum</Description>
</Book>
</Books>
</Root>
一本书可以有多个流派 ID,可以有多种语言。 我有一个流派 ID 列表、语言列表和书籍类型列表。
我想获取所有类型 ID、语言 ID 和书籍类型与该列表匹配的书籍。
我为此使用了 LINQ 查询,因为循环遍历所有书籍 xml 节点会更有效-
List<XElement> elems = xldoc.Root.Descendants("Books")
.Descendants("Book")
.Where(x=>
(listofgenres.Contains(x.Element("GenreId").Value)) &&
(listoflanguages.Contains(x.Element("LanguageId").Value)) &&
(listofbooktypes.Contains(x.Element("BookType").Value)))
.ToList();
但它并没有如我所愿地获取结果。我做错了什么???
如果假设我有一个 bookIds 列表,例如 1、3、4、2,并且我想以与我的列表相同的顺序获取这些 id 的书,那么 linq 的另一种方式是什么。现在,我通过遍历所有 xml 节点并添加到集合中,逐个按 id 获取书籍。
【问题讨论】: