2010-09-30 2 views
0

У меня есть этот XMLКак выполнить поиск набора узлов с использованием критериев поиска с использованием Linq to SQL?

<?xml version="1.0" encoding="utf-8"?> 
<Customers> 
    <Customer Id="1"> 
    <Name>rtertr</Name> 
    <DOB>2010-12-12T00:00:00</DOB> 
    <EMail>[email protected]</EMail> 
    </Customer> 
    <Customer Id="2"> 
    <Name>west</Name> 
    <DOB>0001-01-01T00:00:00</DOB> 
    <EMail>[email protected]</EMail> 
    </Customer> 
    <Customer Id="3"> 
    <Name>west</Name> 
    <DOB>0001-01-01T00:00:00</DOB> 
    <EMail>[email protected]</EMail> 
    </Customer> 
</Customers> 

Как извлечь все узлы, которые имеют название как запад (<Name>west</Name>) и хранить его в коллекции? В нашем случае он должен вернуть 2 узлов (Есть два узла, которые имеют имя, как запад. Это должно быть достигнуто с помощью Linq для SQL.

ответ

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(); 
0

Это не возможно использовать LINQ to SQL для доступа к XML, если вы сначала не конвертируете данные и не храните их в базе данных SQL. Это вызвано LINQ to по SQL-адресу. Возможно, вы имеете в виду LINQ to XML, поэтому я буду считать, что.

Предполагая, что у вас есть XDocument, содержащий XML:

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

С ToList() метод расширения.

xdoc.Root.Descendants("Customer") 
    .Where(c => c.Element("Name").Value == "west") 
    .ToList(); 
Смежные вопросы