在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();