LINQ to XML запрос из строки запроса - PullRequest
0 голосов
/ 28 июня 2011

Мне нужно создать xml-файлы на основе значений строки запроса.

Мой xml-файл:

<Products>
<Product>
    <Name>Name</Name>
    <Category>Books</Category>
    <SubCategory>Drama</SubCategory>
</Product>
<Product>
    <Name>Name</Name>
    <Category>Books</Category>
    <SubCategory>Action</SubCategory>
</Product>
<Product>
    <Name>Name</Name>
    <Category>Paper</Category>
    <SubCategory></SubCategory>
</Product>

Так что, если я наберу ?filter=Books,Paper, мне нужно выбратьProduct где Category содержит значение из строки запроса.

Тогда, если я наберу ?filter=Books,Paper&filter2=Drama, мне все еще нужно Product, где Category содержит filter1, но если Product элемент содержит SubCategory, тосодержит filter2 мне нужно выбрать только те.

Итак, с: ?filter=Books,Paper&filter2=Drama мне нужно получить xml, который выглядит следующим образом:

<Products>
    <Product>
        <Name>Name</Name>
        <Category>Books</Category>
        <SubCategory>Drama</SubCategory>
    </Product>
    <Product>
        <Name>Name</Name>
        <Category>Paper</Category>
        <SubCategory></SubCategory>
    </Product>
</Products>

Также некоторые продукты могут содержать пустой элемент SubCategory.Я не знаю, важно ли это.

Мой запрос выглядит следующим образом:

var items = from el in SimpleStreamAxis(esysPath, "Product")
                        where filter.Contains(el.Element("Category").Value.Trim())
                        where filter1.Contains(el.Element("SubCategory").Value.Trim())
                        select new
                        {
                            ProductID = el.Element("ID").Value,
                            Name = el.Element("Name").Value,
                            Price = el.Element("Price").Value,
                            Picture = el.Element("Picture").Value
                        };

Это выбирает все элементы Product, где filter1 содержит SubCategory.

Так что кто-нибудь может указать мне правильное направление, как написать этот запрос.

Спасибо.

1 Ответ

0 голосов
/ 28 июня 2011

Это должно привести вас в правильном направлении, он найдет все продукты, в которых элемент Category имеет значение Book или Paper

List<string> categories = new List<string() {"Book", "Paper"};
XDocument doc = XDocument.Parse("Your xml string");
var products = doc.Descendants("Product")
               .Where(el => categories.Contains(el.Element("Category").Value));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...