LINQ不区分大小写(无toUpper或toLower)

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。 可能吗?

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

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

相反,如果==使用.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(); 

如果这是对大小写不敏感的sorting规则的数据库的LINQ to SQL查询,那么它已经是不区分大小写的。 请记住,LINQ to SQL实际上并没有执行你的==调用; 它将它视为一个expression式并将其转换为SQL中的一个相等运算符。

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

 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时也会处理

使用

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

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

 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); } 

将其更改为

 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(); } 

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

例如,使用NOCASE整理的SQLite将忽略该选项。 Oracle使用将会采取的会话设置NLS_COMP,NLS_SORT。

否则当你没有文化问题时使用ToLower()或ToUpper()。