如果你有一个只能返回一个结果的select LINQ查询,你是否必须有一个foreach循环来获得结果?
或者有更好的方法吗?
答案 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)
您可以使用First
或Single
。
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};
这个技巧是为了让你获得价值。