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

Ton*_*son 43 linq linq-to-sql

如果我在关键字段上查询具有条件的表,如下所示:

        var user = from u in dc.Users
                   where u.UserName == usn
                   select u;
Run Code Online (Sandbox Code Playgroud)

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

Jor*_*ira 77

尝试这样的事情:

var user = (from u in dc.Users
                   where u.UserName == usn
                   select u).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

FirstOrDefault方法返回,如果没有这样的元素被发现,满足指定条件或默认值的序列的第一个元素.


Dan*_*mal 18

为什么不喜欢

var user = dc.Users.SingleOrDefault(u=> u.UserName==usn);
Run Code Online (Sandbox Code Playgroud)

  • FirstOrDefault将进行TOP 1操作以提高效率.不幸的是,SingleOrDefault没有做TOP 2并选择整套. (7认同)

Jam*_*ran 5

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