2015-03-02 71 views
-2

我有一個這樣的xml文件。對linq這個查詢感到困惑

<Accounts> 
    <Account Id=""> 
     <UserName/> 
     <Password/> 
     <AddingDate/> 
     <AccountType/> 
    </Account> 
</Accounts> 

我想要做的是,如果第一個元素的attaribute值不爲空,則返回true,否則爲false

private bool IsListEmpty(){  
    XDocument doc = XDocument.Load("UserAccounts.xml"); 

    var c = from p in doc.Descendants("Account") 
      where p.Element("Id").Value == "" 
      select p.Value; 

    if(c==null)return...... 
} 

但我我stuck.How能做到這一點

+6

「卡住」不是一個合適的問題描述的任何將返回true。詳細解釋你期待的是什麼,實際發生了什麼以及你試圖解決的問題。 – CodeCaster 2015-03-02 15:42:55

+0

如何創建沒有ID的帳戶? – Tim 2015-03-02 15:45:26

+0

你在混淆屬性和元素。你的程序試圖在名爲'Account'的元素中獲得一個名爲'Id'的元素,但它是一個屬性。試試這樣: 'where(string)p.attribute(「Id」)==「」' – 2015-03-02 15:50:14

回答

2

只需使用FirstOrDefault(),然後檢查Id屬性是否爲空:

var account = doc.Descendants("Account").FirstOrDefault(); 
return account != null && !string.IsNullOrEmpty(account.Attribute("Id").Value) 
+0

謝謝.......謝謝soooooo太多 – digrev07 2015-03-02 15:55:30

1

不知道我是否理解正確,但我認爲。任何人都會這樣做。

XElement xelement = XElement.Load("UserAccounts.xml"); 
return xelement.Elements("Account").Where(x => string.IsNullOrEmpty((string)x.Element("Id"))).Any(); 

如果一個元素被發現是「」

+1

但這不是問題。如果第一個條目的Id是空的,他/她想要發出提示,而不是如果有非空ID的條目 – swe 2015-03-02 15:51:16