Blu*_*kMN 133 .net sql linq vb.net linq-to-sql
我已经读过使用ToUpper和ToLower来执行不区分大小写的字符串比较是不明智的,但是在LINQ-to-SQL方面我没有其他选择.LINQ-to-SQL忽略String.Compare的ignoreCase和CompareOptions参数(如果您使用区分大小写的数据库,即使您要求不区分大小写的比较,也会得到区分大小写的比较).ToLower或ToUpper是最好的选择吗?这个比那个好吗?我以为我读过ToUpper更好的地方,但我不知道这是否适用于此.(我正在进行大量的代码审查,每个人都在使用ToLower.)
Dim s = From row In context.Table Where String.Compare(row.Name, "test", StringComparison.InvariantCultureIgnoreCase) = 0
Run Code Online (Sandbox Code Playgroud)
这转换为一个SQL查询,它简单地将row.Name与"test"进行比较,并且不会在区分大小写的数据库上返回"Test"和"TEST".
And*_*ott 109
正如您所说,ToUpper和ToLower之间存在一些重要的差异,当您尝试进行不区分大小写的相等性检查时,只有一个是可靠的.
理想情况下,进行不区分大小写的相等性检查的最佳方法是:
String.Equals(row.Name, "test", StringComparison.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)
注意,但是,这并不能工作在这种情况下!因此,我们坚持ToUpper
或ToLower
.
请注意Ordinal IgnoreCase以使其安全.但确切地说,您使用的案例(中)敏感检查的类型取决于您的目的.但是通常在排序时使用Equals进行等式检查和比较,然后为作业选择正确的StringComparison.
迈克尔卡普兰(一个公认的文化和角色处理权威,如此)在ToUpper与ToLower上有相关的帖子:
他说"String.ToUpper - 使用ToUpper而不是ToLower,并指定InvariantCulture以获取操作系统套管规则 "
And*_*vey 72
我System.Data.Linq.SqlClient.SqlMethods.Like(row.Name, "test")
在查询中使用
过.
这将执行不区分大小写的比较.
小智 6
我使用Lambda表达式尝试了这个,并且它有效.
List<MyList>.Any (x => (String.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase)) && (x.Type == qbType) );