LINQ поиск заданного строкового значения в узле - PullRequest
1 голос
/ 29 июля 2011

Я новичок в использовании LINQ. Я хотел бы использовать LINQ для получения определенного значения для данной строки. У меня есть документ XML (files.xml), который содержит форматирование ниже.

<?xml version="1.0" encoding="utf-8" ?>
<DocumentMappings>
    <DocumtentCategory>
      <CategoryId>001</CategoryId>
      <CategoryName>Checksheet and Lists</CategoryName>
      <DestinationDocumentLibrary>CheckList and Lists</DestinationDocumentLibrary>
      <Multiple>false</Multiple>
    </DocumtentCategory>

    <DocumtentCategory>
      <CategoryId>011</CategoryId>
      <CategoryName>Product Information</CategoryName>
      <DestinationDocumentLibrary>Product Information</DestinationDocumentLibrary>
      <Multiple>true</Multiple>     
    </DocumtentCategory>

</DocumentMappings>

Вопрос

Как получить значение «DestinationDocumentLibrary» в виде строки для «CategoryName» из «Checksheet and Lists», используя LINQ.

В приведенном выше примере «Checksheet and Lists» передается как параметр (строка) и будет динамически передаваться в запрос LINQ.

Надеюсь, вопрос ясен и большое спасибо заранее.

Ответы [ 3 ]

1 голос
/ 29 июля 2011

Попробуйте:

public string GetDestination(string categoryName, XDocument xDoc)
{

     var query = (from x in xDoc.Descendants("DocumetentCategory")
                  where ((string)x.Element("CategoryName")).Contains(categoryName)
                  select (string)x.Element("DestinationDocumentLibrary")).SingleOrDefault();

     return (string)query;
}

xDoc - это XDocument, содержащий ваш XML.

0 голосов
/ 29 июля 2011

Это может быть не самым хорошим, но, похоже, работает:

XDocument doc = XDocument.Parse(xml);
var s = doc.Descendants("DestinationDocumentLibrary")
           .Where(e => e.Parent.Element("CategoryName")
                               .Value
                               .Equals("Checksheet and Lists"))
           .FirstOrDefault()
           .Value;

и просто для полноты - получите копию Linqpad для тестирования такого рода вещей.

0 голосов
/ 29 июля 2011
var values = doc.Descendants("DocumtentCategory")
                .Where(x => x.Descendants("CategoryName")
                .Where(x1 => x1.Value == "Checksheet and Lists").Any())
                .Select(x => x.Descendants("DestinationDocumentLibrary").First().Value)
                .ToList();
...