LINQ上的简单查询

问题描述:

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"); 

任何帮助?

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

即使结果包含单个记录,查询也会返回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

LINQ将总是返回可枚举的结果。为了得到它的计算并返回一个结果,你可以使用

.First()

.FirstOrDefault()

.Single()

.SingleOrDefault()

根据您的要求。