【问题标题】:Is there a better way to force LINQ-TO-SQL string comparison to be Case Insensitive?有没有更好的方法来强制 LINQ-TO-SQL 字符串比较不区分大小写?
【发布时间】:2018-02-07 12:41:55
【问题描述】:

我目前拥有的是这个,它忽略了服务器的排序规则。

Snacks.Where(x => string.Equals(x.Name.ToLower(), "CHOCOLATE".ToLower()))

生成的 SQL 是:

-- Region Parameters
DECLARE @p0 NVarChar(1000) = 'chocolate'
-- EndRegion
SELECT [t0].[SnackID], [t0].[Name]
FROM [Snack] AS [t0]
WHERE (LOWER([t0].[Name]) IS NOT NULL) AND (LOWER([t0].[Name]) = @p0)

有没有更好的方法来强制比较忽略大小写?

【问题讨论】:

  • 是“将 SQL Server / db 配置为不区分大小写”的选项吗?
  • 就我而言,依赖数据库排序规则并不是一个理想的解决方案。这就是我在问题中添加“强制”的原因:)

标签: c# .net linq linq-to-sql


【解决方案1】:

使用两个字符串的重载并比较下面的示例是忽略大小写的示例,但是您可以查看其他选项,这里是矿石信息的链接StringComparison MSDN documentation

(string a, string b, StringComparison.InvariantCultureIgnoreCase)

【讨论】:

  • 虽然你的答案在理论上是正确的,但在这种情况下是行不通的。 OP 实际上是使用 LINQ_TO_SQL 查询数据库。 linq 语句将被翻译成 sql 查询。但是由于在 sql 中没有对应的重载 OP 在使用您的解决方案时只会收到 System.NotSupportedException
  • 抱歉,正如@MongZhu 所说,LINQ-TO-SQL 不支持采用 StringComparison.InvariantCultureIgnoreCase 的重载。
猜你喜欢
  • 1970-01-01
  • 2011-04-20
  • 2023-03-22
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
相关资源
最近更新 更多