在LINQ to SQL中检索单个记录结果的最佳方法

x33g5p2x  于 2022-12-06  发布在  其他
关注(0)|答案(7)|浏览(137)

如果我使用索引键字段的条件查询数据表,如下所示:

var user = from u in dc.Users
                   where u.UserName == usn
                   select u;

我知道我要么得到零个结果,要么得到一个结果。我是否应该继续使用for-each来检索结果,或者是否有其他更好的方法来处理这种情况。

yizd12fk

yizd12fk1#

请尝试以下操作:

var user = (from u in dc.Users
                   where u.UserName == usn
                   select u).FirstOrDefault();

FirstOrDefault方法返回序列中满足指定条件的第一个元素,如果找不到这样的元素,则返回默认值。

8e2ybdfx

8e2ybdfx2#

为什么不像

var user = dc.Users.SingleOrDefault(u=> u.UserName==usn);
qf9go6mv

qf9go6mv3#

还应注意,First/FirstOrDefault/Single/SingleOrDefault是LINQ to Sql命令的执行点。由于在此之前尚未执行LINQ语句,因此它能够影响生成的SQL(例如,它可以将TOP 1添加到sql命令)

ljsrvy3e

ljsrvy3e4#

我会使用First()或FirstOrDefault()。
区别:在First()上,如果找不到行,则会抛出异常。

ktca8awb

ktca8awb5#

我会使用SingleOrDefault方法。

var user = (from u in dc.Users
                   where u.UserName == usn
                   select u).SingleOrDefault();
w3nuxt5m

w3nuxt5m6#

另一个选项是使用Contains(username),而不是“==”

var user = (from u in dc.UserInfo 
                      where u.Users.Contains(username) 
                      select u).SingleOrDefault();
1zmg4dgp

1zmg4dgp7#

here总结:

  1. First()返回序列中的第一个元素。当结果中没有元素或source为空时,它会抛出错误。如果需要多个元素,而您只需要第一个元素,则应该使用它。
  2. FirstOrDefault()返回序列中的第一个元素,如果没有找到元素,则返回默认值。只有当source为null时,才会抛出错误。如果需要多个元素,而您只需要第一个元素,则应该使用它。如果结果为空,也很好。
  3. Single()它返回序列中唯一的一个元素。如果结果包含0个或多于1个元素,它将抛出异常。当我们知道只需要一个元素,但不是0个或2个或更多时,我们应该使用它。
  4. SingleOrDefault()它返回一个特定的元素,如果没有找到该元素,则返回它的默认值。如果结果包含2个或更多元素,则会抛出异常。我们应该在知道0或1元素是预期结果时使用它。

相关问题