2012-08-15 102 views
0

這是我的xml文件:爲什麼在這個Linq-To-Xml查詢中首先需要?

<Corsi> 
    <corso ID="0" nome="Corso 1" quota="100" dataCorso="24/08/2012"></corso> 
    <corso ID="1" nome="Corso 2" quota="100" dataCorso="04/09/2012"></corso> 
    <corso ID="2" nome="Corso 3" quota="100" dataCorso="14/09/2012"></corso> 
    <corso ID="3" nome="Corso 4" quota="100" dataCorso="20/08/2012"></corso> 
    <corso ID="4" nome="Corso 5" quota="100" dataCorso="30/09/2012"></corso> 
</Corsi> 

查詢1:工作

var QUERY = docCorsi.Descendants("corso") 
      .Where(a => (int)a.Attribute("ID") == Convert.ToInt16(txtNomeAgenzia.Text)) 
      .Select(a =>a.Attribute("dataCorso").Value) 
      .First(); 

查詢2:不工作

var QUERY = docCorsi.Descendants("corso") 
      .Where(a => (int)a.Attribute("ID") == Convert.ToInt16(txtNomeAgenzia.Text)) 
      .Select(a =>a.Attribute("dataCorso").Value); 

任何人都可以解釋爲什麼是必要的。首先,即使我確定查詢只返回一個結果?

+0

「不起作用」不是一個足夠的錯誤描述。你是否收到編譯器錯誤?例外? – 2012-08-15 09:49:59

+0

查詢後我使用DateTime dt = Convert.ToDateTime(QUERY);而例外情況是:System.InvalidCastException:不可用,因此無法使用此選項。WhereSelectEnumerableIterator'2 [System.Xml.Linq.XElement,System.String]'sul tipo'System.IConvertible'。 – Barbara 2012-08-15 09:53:37

回答

1

原因是正常的LINQ查詢總是返回一個IEnumerable<T>,即使只有一個結果。追加First返回查詢返回的第一個元素。如果您確定只能有一個,您也可以使用Single

+0

「查詢總是返回一個IEnumerable 」完美!正是我想要確定的。謝謝丹尼爾! – Barbara 2012-08-15 10:14:29

+0

+1我錯了,現在也清楚了.. – 2012-08-15 10:18:40

相關問題