2010-09-30 56 views
0

我想查询一个带有dinamyc linq查询的xml文件。我按照scottGu的博客C#XML动态LINQ

scottGu's Blog

但是我有一个问题,使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查询的例子。

Thx任何回应! D.

回答

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

这就是我如何去做。看起来比你更容易阅读,并给你你期望的输出。请享用!

+0

对不起您的问题。这是一个基本的Linq查询,不是一个动态的查询。由于我对Dynamic Linq库没有任何经验,所以我甚至无法真正更新我的答案 – Adkins 2010-09-30 08:53:35

+0

Thx!但是xml不等于。唯一相同的是文档根目录“价格”,但每个XML的内容(对于内容我是指xml属性)会发生变化。属性可能更多或更少,名称更改。为此,我必须能够使用未在文件中编码的动态查询。 – hanc 2010-09-30 09:10:18

0

动态Linq不能像那样工作。您使用的Where子句中的标准产生类似这样的表达式:

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

sexname没有的XAttribute性质,所以这是行不通的。

无论如何,我不认为你可以使用动态Linq来生成Linq XML查询......它适用于Linq到对象,也适用于Linq to SQL和Linq to Entities,因为表达式被转换为SQL Linq提供程序,但没有提供程序生成Linq XML查询...