Linq执行不区分大小写的比较

Jag*_*ggu 5 c# linq entity-framework

我只想在确切的密码和大小写匹配时才想要用户对象.但是,即使密码的大小写不同,此查询也会获取结果:

db.Users.Where(u => u.Username.ToLower() == username.ToLower() &&
                        u.Password == password).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Jon*_*nna 7

最简单的方法是在DB下根据区分大小写的规则进行用户名匹配,并在其区分大小写的规则下使用.NET中的密码匹配:

db.Users.Where(u => u.Username == username).ToList().Where(u => u.Password == password).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

ToList()反对基于来自基于数据库的LINQ移动LINQ,并因为只会有一个匹配的情况下,无论如何,这样做对性能的影响可以忽略不计.

仍然存在将密码存储在数据库中的问题!

  • 究竟.开发人员的时间也很重要,而且你有更大的鱼来煎炸而不是那个小狡辩(就像你的数据库中存有密码一样!). (4认同)
  • 这不是哲学上的错误.在我看来,过滤两次是非常不愉快的.但是,我们一次过滤一套规则,一次又一次; 哲学上它是完美的,因为在这种情况下,"世界规则"有两个不同的过滤情况,规则略有不同. (2认同)