我正在进行用户登录身份验证。我像这样制作LINQ查询:
var v = db.AppUsers.Where(a=>a.USERNAME.Equals(appUser.USERNAME) && a.PASSWORD.Equals(appUser.PASSWORD));
现在我要在会话变量中存储用户名,ID和角色。为此,我应该使用什么,
var v = db.AppUsers.Where(a=>a.USERNAME.Equals(appUser.USERNAME) && a.PASSWORD.Equals(appUser.PASSWORD)).FirstOrDefault();
or SingleOrDefault().
请建议使用SingleOrDefault()或FirstOrDefault()。 哪个是最快且更优化的?
请注意,USERNAME在这里是唯一的。
答案 0 :(得分:1)
FirstOrDefault
和SingleOrDefault
之间的唯一区别是他们从RDBMS检索数据后所做的事情:
SingleOrDefault
检查是否有更多数据,如果有第二行则抛出异常FirstOrDefault
只返回第一行如果保证行是唯一的,那么从性能角度来看,使用FirstOrDefault
可以节省十几个CPU周期。然而,操作主要由RDBMS时序控制,你不太可能看到任何差异。
另一方面,从可读性的角度来看,唯一记录的检索应该看起来像是对唯一记录的检索,而不是检索第一条记录。使用SingleOrDefault
有两个好处:
这就是为什么我会使用SingleOrDefault
- 更加小心,值得超过十几个CPU周期。