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

时间:2008-10-15 13:20:31

标签: linq linq-to-sql

如果我在关键字段中查询具有条件的表,如:

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

我知道我会得到零结果或一个结果。我是否仍然可以继续使用for-each检索结果,或者是否有其他首选方法来处理这种情况。

6 个答案:

答案 0 :(得分:77)

尝试这样的事情:

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

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

答案 1 :(得分:18)

为什么不喜欢

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

答案 2 :(得分:5)

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

答案 3 :(得分:4)

我会使用First()或FirstOrDefault()。

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

答案 4 :(得分:1)

我会使用SingleOrDefault方法。

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

答案 5 :(得分:0)

另一种选择是使用Contains(用户名)而不是“==”

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