栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

LINQ to Entities区分大小写的比较

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LINQ to Entities区分大小写的比较

那是因为您使用的是 LINQ To Entities ,最终将Lambda表达式转换为SQL语句。这意味着区分大小写 取决于 您的SQL
Server,默认情况下,SQL Server具有 SQL_Latin1_General_CP1_CI_AS 排序规则,并且不区分大小写。

使用 ObjectQuery.ToTraceString
查看实际上已提交给SQL Server的生成的SQL查询揭示了一个奥秘:

string sqlQuery = ((ObjectQuery)context.Thingies        .Where(t => t.Name == "ThingamaBob")).ToTraceString();

创建 LINQ to Entities 查询时, LINQ to Entities
利用LINQ解析器开始处理查询,并将其转换为LINQ表达式树。然后将LINQ表达式树传递给 Object
Services

API,后者将表达式树转换为命令树。然后将其发送到存储提供程序(例如SqlClient),后者将命令树转换为本地数据库命令文本。查询中获取的数据存储执行,结果被
物化实体对象对象服务 。两者之间未考虑逻辑区分大小写。因此,无论您将谓词放在哪种情况下,除非您更改该列的SQL
Server排序规则,否则SQL Server始终将其视为相同。

服务器端解决方案:

因此,最好的解决方案是将 Thingies 表中“ 名称” 列的排序 规则 更改 为COLLATE
Latin1_General_CS_AS ,这是区分大小写的,方法是在SQL Server上运行以下命令:

ALTER TABLE ThingiesALTER COLUMN Name VARCHAr(25)COLLATE Latin1_General_CS_AS

有关 SQL Server 排序规则的 更多信息,请查看 SQL
SERVER排序规则区分大小写的SQL查询搜索。

客户端解决方案:

您可以在客户端应用的唯一解决方案是使用 LINQ to Objects 进行另一个似乎不太优雅的比较:

Thingies.Where(t => t.Name == "ThingamaBob")        .AsEnumerable()        .First(t => t.Name == "ThingamaBob");


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405370.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号