2010-09-30 72 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查詢...