从LINQ Query返回一个结果

时间:2009-12-18 18:29:21

标签: c# linq

如果你有一个只能返回一个结果的select LINQ查询,你是否必须有一个foreach循环来获得结果?

或者有更好的方法吗?

5 个答案:

答案 0 :(得分:18)

// Will return a default value if no object is found in the DB
db.Table.SingleOrDefault(x => x.something == someParameter);

// Will throw an exception if records are not found
db.Table.Single(x => x.something == someParameter);

感谢Mehrdad的评论......这两行都已更新。

如果您的查询可能导致返回多个记录,那么(如评论中所述)Single()SingleOrDefault()是错误的调用方法。您将保持相同的语法,但分别调用First()FirstOrDefault()

答案 1 :(得分:5)

var myLinqObj = db.MyObjects.Take(1).SingleOrDefault();

答案 2 :(得分:5)

您可以使用FirstSingle

First返回第一行,无论是多行还是只有一行。

Single期望只返回一行,如果有多行则抛出异常。

因此,如果您希望只有一行,

Single可能是更好的选择,这样您就可以立即看到问题并对其进行排查。

答案 3 :(得分:2)

你可以像这样使用.First()或.FirstOrDefault():

Foo foo = query.Select(a => a.Name == "foo").FirstOrDefault();

答案 4 :(得分:0)

从所有已经说过,如果您使用LINQ-to-XML,那么在您拥有单个元素之后我将使用Value属性。

Select new { *cols* }如果是列表,数组或表格。 例。 ...选择新的{c.Name,c.Value};

这个技巧是为了让你获得价值。