C # XML Dynamic LINQ - PullRequest
       2

C # XML Dynamic LINQ

0 голосов
/ 30 сентября 2010

Я пытаюсь запросить XML-файл с помощью запроса dinamyc linq. Я подписался на блог scottGu

Блог scottGu

Но у меня проблема с предложением where. Это сценарий.

<Rates>
<Rate id="1" tax="20.5" sex="M" name="Jhon">
<Rate id="2" tax="2.5" sex="F" name="Aline">
</Rate>

Идея состоит в том, чтобы запросить xml, используя фильтр с указанием пола и имени.

XDocument doc = XDocument.Load(new StringReader(xml));
var query = doc.Elements("Rates").Attributes().AsQueryable().Where("sex='M' and and name='Jhon'");

Я использую этот метод, потому что с методом SelectSingleNode () у меня проблема, если параметр в предложении where не упорядочен, и потому что запрос динамический.

Но у меня есть эта ошибка:
No property or field 'sex' exists in type 'XAttribute'

Я не знаю, правильный ли синтаксис, и если это правильный способ сделать динамический запрос. Я не нашел пример в интернете с XML-запросом.

Спасибо за любой ответ! D.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2010

Динамический Linq так не работает. Критерии, которые вы используете в предложении Where, генерируют выражение, похожее на это:

... Where(attr => attr.sex == "M" && attr.name == "John")

sex и name не являются свойствами XAttribute, поэтому он не работает.

В любом случае, я не думаю, что вы можете использовать Dynamic Linq для генерации запросов Linq to XML ... Это работает для Linq to Objects, а также для Linq to SQL и Linq to Entities, поскольку выражение преобразуется в SQL Поставщик Linq, но нет поставщика, генерирующего запросы Linq to XML ...

0 голосов
/ 30 сентября 2010
XDocument doc = XDocument.Load(new StringReader(xml));
var query = from element in doc.Elements("Rates")
            Where element.Attribute("sex").Value.Equals('M') &&
                  element.Attribute("name").Value.Equals("John")
            select element;

Вот так я и поступил бы. Кажется, легче читать, чем у вас, и дает вам результат, на который вы надеетесь. Наслаждайтесь! * * 1002

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...