如果我使用索引键字段的条件查询数据表,如下所示:
var user = from u in dc.Users where u.UserName == usn select u;
我知道我要么得到零个结果,要么得到一个结果。我是否应该继续使用for-each来检索结果,或者是否有其他更好的方法来处理这种情况。
yizd12fk1#
请尝试以下操作:
var user = (from u in dc.Users where u.UserName == usn select u).FirstOrDefault();
FirstOrDefault方法返回序列中满足指定条件的第一个元素,如果找不到这样的元素,则返回默认值。
8e2ybdfx2#
为什么不像
var user = dc.Users.SingleOrDefault(u=> u.UserName==usn);
qf9go6mv3#
还应注意,First/FirstOrDefault/Single/SingleOrDefault是LINQ to Sql命令的执行点。由于在此之前尚未执行LINQ语句,因此它能够影响生成的SQL(例如,它可以将TOP 1添加到sql命令)
ljsrvy3e4#
我会使用First()或FirstOrDefault()。区别:在First()上,如果找不到行,则会抛出异常。
ktca8awb5#
我会使用SingleOrDefault方法。
var user = (from u in dc.Users where u.UserName == usn select u).SingleOrDefault();
w3nuxt5m6#
另一个选项是使用Contains(username),而不是“==”
var user = (from u in dc.UserInfo where u.Users.Contains(username) select u).SingleOrDefault();
1zmg4dgp7#
从here总结:
First()
FirstOrDefault()
Single()
SingleOrDefault()
7条答案
按热度按时间yizd12fk1#
请尝试以下操作:
FirstOrDefault方法返回序列中满足指定条件的第一个元素,如果找不到这样的元素,则返回默认值。
8e2ybdfx2#
为什么不像
qf9go6mv3#
还应注意,First/FirstOrDefault/Single/SingleOrDefault是LINQ to Sql命令的执行点。由于在此之前尚未执行LINQ语句,因此它能够影响生成的SQL(例如,它可以将TOP 1添加到sql命令)
ljsrvy3e4#
我会使用First()或FirstOrDefault()。
区别:在First()上,如果找不到行,则会抛出异常。
ktca8awb5#
我会使用SingleOrDefault方法。
w3nuxt5m6#
另一个选项是使用Contains(username),而不是“==”
1zmg4dgp7#
从here总结:
First()
返回序列中的第一个元素。当结果中没有元素或source为空时,它会抛出错误。如果需要多个元素,而您只需要第一个元素,则应该使用它。FirstOrDefault()
返回序列中的第一个元素,如果没有找到元素,则返回默认值。只有当source为null时,才会抛出错误。如果需要多个元素,而您只需要第一个元素,则应该使用它。如果结果为空,也很好。Single()
它返回序列中唯一的一个元素。如果结果包含0个或多于1个元素,它将抛出异常。当我们知道只需要一个元素,但不是0个或2个或更多时,我们应该使用它。SingleOrDefault()
它返回一个特定的元素,如果没有找到该元素,则返回它的默认值。如果结果包含2个或更多元素,则会抛出异常。我们应该在知道0或1元素是预期结果时使用它。