如果我在关键字段中查询具有条件的表,如:
var user = from u in dc.Users
where u.UserName == usn
select u;
我知道我会得到零结果或一个结果。我是否仍然可以继续使用for-each检索结果,或者是否有其他首选方法来处理这种情况。
答案 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();