SQL Server执行基于COLLATE选项的查询,因此您可以定义如何执行比较(区分大小写)。您可以在创建表或查询执行期间执行此操作。
如何在LINQ to SQL查询期间控制排序规则?当我进行table.Column == stringValue
比较时,我的查询总是不区分大小写吗?
答案 0 :(得分:3)
我没有太多使用COLLATE选项,但我会最好地抓住这个问题。
根据article:
LINQ to SQL在翻译查询时不考虑服务器设置。
如果COLLATE是数据库/表/列设置,它应该只在数据库中设置,并在连接时准备就绪。
如果COLLATE是连接设置,则可以获取datacontext的连接并运行命令进行设置。这样做的好地方可能是partial void OnCreated
方法。
答案 1 :(得分:-2)
你必须记住,L2S是一个对象关系映射系统,所以它试图比较对象,并转换为SQL。在L2S中,如果你想比较两个字符串,你需要ToLower()两个字符串进行比较。
对我来说另一件事是'陷阱'是在L2S中,如果你提供的比较值为null,字符串比较将无法正确评估。因此,在您的示例中,如果table.Column为null且stringValue也是如此,则您的查询将不会返回正确的结果(我假设stringValue是您的代码中定义的变量)。为了在L2S中将字符串与null进行比较,您必须将其显式地与null进行比较:table.Column == null。
查看此article