如何使用Linq to SQL使用搜索条件搜索一组节点?

时间:2010-09-30 22:40:34

标签: c# linq-to-xml

我有这个XML

<?xml version="1.0" encoding="utf-8"?>
<Customers>
   <Customer Id="1">
    <Name>rtertr</Name>
    <DOB>2010-12-12T00:00:00</DOB>
    <EMail>werer@test.com</EMail>
  </Customer>
  <Customer Id="2">
    <Name>west</Name>
    <DOB>0001-01-01T00:00:00</DOB>
    <EMail>west@test.com</EMail>
   </Customer> 
  <Customer Id="3">
    <Name>west</Name>
    <DOB>0001-01-01T00:00:00</DOB>
    <EMail>west@test.com</EMail>
   </Customer> 
</Customers>

如何获取名称为west(<Name>west</Name>)的所有节点并将其存储在集合中?在我们的例子中,它应该返回2个节点(有两个节点,其名称为west。这必须使用Linq to SQL实现。

3 个答案:

答案 0 :(得分:1)

var doc = XDocument.Parse("<Customers>...</Customers>");

var result = doc.Root
                .Elements("Customer")
                .Where(e => (string)e.Element("Name") == "west")
                .ToList();

var doc = XDocument.Parse("<Customers>...</Customers>");

var result = (from e in doc.Root.Elements("Customer")
              where (string)e.Element("Name") == "west"
              select e
             ).ToList();

答案 1 :(得分:0)

除非您首先转换数据并将其存储在SQL数据库中,否则无法使用LINQ to SQL来访问XML。出于某种原因,它被称为LINQ to SQL 。也许你的意思是LINQ到 XML 所以我会假设。

假设您有一个包含XML的XDocument

var customers = myDocument.Root.Descendants()
    .Where(n => n.Name.LocalName == "Customer" &&
                n.Element("Name").Value == "west")
    .ToList();

答案 2 :(得分:0)

使用ToList()扩展方法。

 xdoc.Root.Descendants("Customer")
    .Where(c => c.Element("Name").Value == "west")
    .ToList();