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

如果我查询关键字段的条件如下:

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

我知道我会得到零结果或一个结果。 我仍然应该继续前进,并使用for-each来检索结果,或者有另一种首选的方法来处理这种情况。

尝试这样的事情:

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

如果没有find这样的元素,则FirstOrDefault方法返回满足指定条件或缺省值的序列的第一个元素。

为什么不喜欢

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

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

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

区别在于:First()将会有一个exception抛出,如果没有行可以被​​发现。

我会使用SingleOrDefault方法。

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

另一种select是使用包含(用户名)而不是“==”

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