C# 如何使用LINQ to SQL忽略大小写?

C# 如何使用LINQ to SQL忽略大小写?,c#,linq-to-sql,C#,Linq To Sql,我在使用LINQ to SQL获取数据时遇到问题。我使用以下代码查找我们web应用程序的用户(用户名是电子邮件地址): 如果我键入test@test.com如果我键入tESt@tESt.com我不知道。如何让LINQ在选择用户时忽略该情况?是否: var referenceUser = db.ReferenceUsers.SingleOrDefault( rf => rf.Email.ToUpper() == values["emailAddress"].ToUp

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

如果我键入
test@test.com
如果我键入
tESt@tESt.com
我不知道。如何让LINQ在选择用户时忽略该情况?

是否:

var referenceUser = 
    db.ReferenceUsers.SingleOrDefault(
        rf => rf.Email.ToUpper() == values["emailAddress"].ToUpper());
工作

应将
ToUpper()
转换为正确的SQL以作为数据库查询运行,然后返回这两个结果

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

“正确”是指是否忽略大小写

我就是这样做的。可能会给你一个提示。我有一个配置文件列表,我想搜索包含“aR”、“aR”或“aR”的配置文件名

List profileList=CreateProfile();
string search=“aR”。ToLower();
profileList=(来自profileList中的p,其中p.Name.ToLower()包含(搜索)
orderby p.Name选择p.ToList();

如果我不知道存在忽略大小写标志,但idea为+1,我会这么做。@David-自从发送给SingleOrDefault的lambda表达式被翻译后,在LINQ中如何比较问题。这种方法一定会被转换成SQL。效果很好。但是,对于lambdas中没有的其他字符串比较,我应该使用ToLower()还是应该使用StringComparison.OrdinalIgnoreCase?请注意,在db列上调用.ToLower将确保即使它已被索引,SQL Server也无法使用该索引。如果表的大小足以使表扫描成为一件坏事,那么将排序规则更改为不区分大小写的排序规则将是一个更好的选择。由于Unicode的奇怪性,ToUpper()比ToLower()更受欢迎(有几个Unicode字符没有小写变体),尽管仍然存在歧义(至少)在土耳其语中,大写字母i为İ(U+0130:大写字母i,上面有点),以匹配小写字母i:ı(U+0131,小的无点i),但如果没有特定地区的比较,这是不可能解决的……看一看早晨?我现在是下午4点。对数据库中的那个列启用不区分大小写怎么样?不幸的是,我们仍然生活在这样一个需要微调的时代。在为列启用索引时,数据库必须知道列是否不区分大小写。不过,作为考虑的一点,我认为这不会在服务器上运行。我记得使用这种模式时,没有正确解释查询。显然,通过投票的方式,SO读者对.Net习惯用法非常满意,但对IQueryable上的LINQ则不太满意。
var referenceUser = db.ReferenceUsers.SingleOrDefault(rf => string.Compare(rf.Email, values["emailAddress"],true)==0);
List<Profile> profileList = CreateProfile();
string search = "aR".ToLower();

profileList = (from p in profileList where p.Name.ToLower().Contains(search)
        orderby p.Name select p).ToList();
listTasks.ItemsSource
    = taskList.Where( x => x.TaskDescription.ToLower()
                            .ToString()
                            .StartsWith(txtSearch.Text.Trim()
                            .ToLower()
                            .ToString()));