2010-10-04 104 views
1
var q = from child in doc.Descendants("level") 
     where (int)child.Attribute("id") == 55 
     select (string)child.Element("Points").**Value.ToString()**; 

我想在執行此查詢後將q作爲類型字符串。即使保留了額外的粗體行,這也給了我一些IEnumerable類型。LINQ上的簡單查詢

那麼讓我這樣說吧。我想讓上面的查詢類似於下面的查詢,而不會在運行時拋出任何錯誤。

string q = from child in doc.Descendants("level") 
      where (int)child.Attribute("id") == 55 
      select (string)child.Element("Points"); 

任何幫助?

回答

4
var q = (from child in doc.Descendants("level") 
     where (int)child.Attribute("id") == 55 
     select (string)child.Element("Points")).FirstOrDefault(); 

Enumerable.FirstOrDefault Method (IEnumerable)

+0

這是kewl ..感謝CD ..我愛上了這個LINQ的東西。 – async 2010-10-04 10:06:25

0

即使結果包含單個記錄,查詢也會返回IEnumerable。試試這個 -

if q.count() > 0 
    var singleQ = q.First(); 

或者如果你是肯定會有ATLEAST一個記錄,然後像這樣做 -

string q = (from child in doc.Descendants("level") 
      where (int)child.Attribute("id") == 55 
      select (string)child.Element("Points")).First(); 
+0

謝謝拉米什.. – async 2010-10-04 10:06:58

+0

你的第一個 - 首先測試'(q.count()> 0)' - 將評估兩次查詢不是嗎?一次檢查計數,然後一次讀取數值。如果你使用'First'或'FirstOrDefault',那麼它只應該評估一次。 – Rup 2010-10-04 10:07:50

+0

你可以用'Any()'代替。 – 2010-10-04 10:10:35