我从sql返回一个包含多个地址的xml字符串,这里是返回的示例:
<Addresses>
<Address>
<LetterQueueOID>2</LetterQueueOID>
<Address1>115 MORNINGVIEW TRL</Address1>
<Address2>SCARBOROUGH, </Address2>
<Address3>M1B5L2</Address3>
<City>SCARBOROUGH</City>
<PostalCode>M1B5L2</PostalCode>
</Address>
<Address>
<LetterQueueOID>1</LetterQueueOID>
<Address1>GD PO BOX 685</Address1>
<Address2>THORNBURY, ON</Address2>
<Address3>N0H2P0</Address3>
<City>THORNBURY</City>
<ProvinceOrState>ON</ProvinceOrState>
<CountryCode>Ca</CountryCode>
<PostalCode>N0H2P0</PostalCode>
</Address>
</Addresses>
我想使用LINQ查询此xml字符串以获取特定的LetterQueueOID,即 选择Address(作为字符串)LetterQueueOID = 2。
我所知道的是我可以使用XDocument,但我无法弄清楚如何得到我想要的东西:
XDocument addresses = XDocument.Parse((string)returnScalar);
IEnumerable<XElement> items = addresses.Root.Elements("Address").ToList();
答案 0 :(得分:3)
使用Where扩展方法尝试lambda表达式。在这里我得到了id为2的地址,就像一个例子
XDocument addresses = XDocument.Parse((string)returnScalar);
var address = addresses.Root.Elements("Address").Where(address => address.Element("LetterQueueOID").Value == "2").FirstOrDefault();
答案 1 :(得分:1)
嗯,你可以这样做:
var matches = addresses
.Root
.Elements("Address")
.Where(addr => (string) addr.Element("LetterQueueOID") == "2")
但是,这将为您提供所有相关的<Address>
元素。你说你想把这个地址作为字符串取回 - 但是用什么格式?
你可以像这样连接字符串:
var matches = addresses
.Root
.Elements("Address")
.Where(addr => (string) addr.Element("LetterQueueOID") == "2")
.Select(addr => (string) addr.Element("Address1") + " "
(string) addr.Element("Address2") + " "
/* etc */);