こんにちは私は本の詳細を含むxmlを持っています。 xmlの構造は -Xmlの検索要素がidsのリストと一致しています
<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、ブックタイプがそのリストと一致するすべての書籍を取得したいと考えています。
私が望んでいたよう
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();
nodes-すべてのブックのXMLをループする。しかし、それは結果をフェッチしなかったことを、より効率的になるように私はこのためにLINQクエリを使用していました。私は間違って何をしていますか?
私は1,3,4,2のようなbookIdのリストを持っていて、これらのIDを持つリストを私のリストと同じ順序でフェッチしたいと思うのですが、linqが別の方法です。今では、すべてのXMLノードをループしてコレクションに追加することで、書籍を1つずつ取り出しています。
あなたのロジックは使用しましたが、すべてのブックノードを返しました。リスト order = new List (){1,3、};リスト books = xldoc.Root.Element( "Books")。 .OrderBy(x => bookids.IndexOf(int)x.Element( "BookId")))。ToList(); ' –
Sonali
次のコードを追加する必要があります。Where(x => order.Contains((int)x)要素( "BookId")) – jdweng