[英]XDocument C# Join
我必須使用XDocument將聯接用於以下xml
<Books>
<Book>
<Name id="1">Test</Name>
<CardNo>1234</CardNo>
</Book>
<Book>
<Name id="1">Test</Name>
<CardNo>5678</CardNo>
</Book>
<Library>
<RackNo>4</RackNo>
<SampleData>Hello</SampleData>
<CardNo>1234</CardNo>
</Library>
<Library>
<RackNo>5</RackNo>
<SampleData>John</SampleData>
<CardNo>5678</CardNo>
</Library>
</Books>
在上面的示例中,我需要加入CardNo,但是它們存在於兩個不同的Records ..下,即Library和Book。 我正在使用此代碼,但該聯接不適用於XDocument。 有什么建議嗎?
var bookRecords = from c in doc.Element("Books").Element("Book")
select new { bookCardNo = c.Attribute("CardNo").Value }
var LibraryRecords = from d in doc.Element("Books").Element("Library")
select new { libCardNo = d.Attribute("CardNo").Value }
var groupedRecords =
from br in bookRecords
join lr in LibraryRecords
on br.bookCardNo equals lr.libCardNo
select new { rackno = lr.Element("RackNo").Value }
首先,您要查詢多個元素,因此需要Elements
而不是Element
。 Element
將僅返回第一項,因此您的LINQ表達式將不會編譯。
其次,沒有稱為CardNo
屬性 CardNo
是element 。
最后, LibraryRecords
將包含一堆匿名對象。 如果要訪問RackNo
或任何其他屬性,則需要將其值包含為該對象的屬性。
var bookRecords =
from book in doc.Elements("Books").Elements("Book")
select new
{
Name = (string) book.Element("Name"),
CardNo = (string) book.Element("CardNo")
};
var libraryRecords =
from lib in doc.Elements("Books").Elements("Library")
select new
{
CardNo = (string) lib.Element("CardNo"),
RackNo = (string) lib.Element("RackNo"),
};
var groupedRecords =
from br in bookRecords
join lr in libraryRecords
on br.CardNo equals lr.CardNo
select new
{
br.Name,
lr.RackNo
};
看到這個小提琴演示。
根據顯示的xml模式,庫與書籍處於同一級別,如果使用Descendants
方法,而不是Attribute
,則使用Element
會更容易,因為在兩種情況下CardNo
都不是屬性:
var bookRecords = from c in doc.Descendants("Book")
select new { bookCardNo = c.Element("CardNo").Value };
var LibraryRecords = from d in doc.Descendants("Library")
select new { libCardNo = d.Element("CardNo").Value,
rackno = d.Element("RackNo").Value };
var groupedRecords =
from br in bookRecords
join lr in LibraryRecords
on br.bookCardNo equals lr.libCardNo
select lr.rackno;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.