如何忽略LINQ-to-SQL的情况?

11 c# linq-to-sql

我在使用LINQ-to-SQL获取数据时遇到问题.我使用以下代码来查找用户的Web应用程序(用户名是电子邮件地址):

var referenceUser = 
    db.ReferenceUsers
      .SingleOrDefault(rf => rf.Email == values["emailAddress"]);
Run Code Online (Sandbox Code Playgroud)

如果我输入,test@test.com我会得到一个,ReferenceUser但如果我打字,tESt@tESt.com我不会.如何在选择用户时让LINQ忽略这种情况?

cod*_*zen 15

请问:

var referenceUser = 
    db.ReferenceUsers.SingleOrDefault(
        rf => rf.Email.ToUpper() == values["emailAddress"].ToUpper());
Run Code Online (Sandbox Code Playgroud)

工作?

本ToUpper()应翻译成正确的SQL作为数据库查询运行,然后返回两个结果.

  • 请注意,在db列上调用.ToLower将确保即使将其编入索引,SQL Server也无法使用该索引.如果表大到足以使表扫描成为坏事,则将排序规则更改为不区分大小写的排序规则将是更好的选择. (2认同)
  • 由于Unicode的古怪性,ToUpper()优先于ToLower()(有几个Unicode字符没有小写变体),尽管仍然存在歧义(至少)土耳其大写字母i是©(U + 0130:资本我上面有点),为了匹配他们的小写I:ı(U + 0131,Small Dotless I),但如果没有特定于语言环境的比较,这是不可能解决的.... (2认同)

Pro*_*m.X 5

var referenceUser = db.ReferenceUsers.SingleOrDefault(rf => string.Compare(rf.Email, values["emailAddress"],true)==0);
Run Code Online (Sandbox Code Playgroud)

"真实"是指是否忽视案件

  • 显然,这个答案是投了方式,SO读者是净成语相当舒适,但与LINQ少等IQueryable的. (5认同)