linq不区分大小写(没有toUpper或toLower)

时间:2011-03-15 13:40:52

标签: c# linq

public Articles GetByName(string name, Categories category, Companies company)
{
    var query = from article in session.Linq<Articles>()
                where article.Name == name &&
                      article.Category == category &&
                      article.Company == company
                select article;
    return query.FirstOrDefault();
}

如何查询不区分大小写。我可以使用toLower或toUpper但我想使用OrdinalIgnoreCase。有可能吗?

8 个答案:

答案 0 :(得分:80)

使用String.Equals和相应的参数使其不区分大小写

mySource.Where(s => String.Equals(s, "Foo", StringComparison.CurrentCultureIgnoreCase));

答案 1 :(得分:38)

相反,如果==使用.Equals(name, StringComparison.OrdinalIgnoreCase)方法。

var query = from article in session.Linq<Articles>()
            where article.Name.Equals(name, StringComparison.OrdinalIgnoreCase) &&
                  article.Category.Equals(category) &&
                  article.Company.Equals(company)
            select article;

return query.FirstOrDefault();

答案 2 :(得分:16)

如果这是针对具有不区分大小写的排序规则的数据库的LINQ to SQL查询,则它已经不区分大小写。请记住,LINQ to SQL实际上并没有执行您的==调用;它将它看作一个表达式并将其转换为SQL中的相等运算符。

如果它是LINQ to Objects,那么你可以像其他海报所指出的那样使用String.Equals。

答案 3 :(得分:8)

var query = from article in session.Linq<Articles>()
           where string.Equals(article.Name,name, StringComparison.OrdinalIgnoreCase) &&
                 string.Equals(article.Category,category, StringComparison.OrdinalIgnoreCase) &&
                 string.Equals(article.Company,company, StringComparison.OrdinalIgnoreCase)
                        select article;

            return query.FirstOrDefault();

当名称,类别,公司为null

时,它也会处理

答案 4 :(得分:4)

使用

String.Equals(article.Name, name, StringComparison.OrdinalIgnoreCase)

答案 5 :(得分:2)

如果您使用的是C#6.0,则可以定义在构造LINQ语句时使用的简短扩展方法:

public static bool EqualsInsensitive(this string str, string value) => string.Equals(str, value, StringComparison.CurrentCultureIgnoreCase);

用法:

query.Where(item => item.StringProperty.EqualsInsensitive(someStringValue));

对于小于6.0的C#,它将如下所示:

public static bool EqualsInsensitive(this string str, string value) 
{
    return string.Equals(str, value, StringComparison.CurrentCultureIgnoreCase);
}

答案 6 :(得分:0)

将其更改为

public Articles GetByName(string name, Categories category, Companies company)
        {
    var query = from article in session.Linq<Articles>()
                            where string.Equals(article.Name, StringComparison.CurrentCultureIgnoreCase)  == name &&
                                string.Equals(article.Category, StringComparison.CurrentCultureIgnoreCase == category &&
                                string.Equals(article.Company, StringComparison.CurrentCultureIgnoreCase == company
                            select article;

                return query.FirstOrDefault();
}

答案 7 :(得分:0)

您确定数据库支持它时,请使用string.Equals(name,article.Name,StringComparison.OrdinalIgnoreCase)。

E.g。带有NOCASE整理的SQLite将忽略该选项。 Oracle使用将采用的会话设置NLS_COMP,NLS_SORT。

如果没有文化问题,请使用ToLower()或ToUpper()。