【发布时间】:2016-10-17 15:57:38
【问题描述】:
我正在失去它... =\
使用 .NET Framework 4 使用实体框架访问 MS SQL DB
(JFYI - 这是一些难看的代码。因为它用于本地服务,并且永远不会处理大于 ~1000 行的表 - 选择的工具集或多或少是可以接受的。)
运行下一个代码
var itemOfInterest = entity.tbl_Items
.FirstOrDefault(item =>
string.Compare(item.Name, SomeLocalItem.Name, true) == 0
&& (string.Compare(item.tbl_Server.FQDN, SomeLocalItem.ServerFQDN, true) == 0)
|| (string.Compare(item.Server.FQDN, WithoutDomainLocalFQDN, true) == 0)
);
它返回给我的第一个(或空)项目,由
(string.Compare(item.tbl_Server.FQDN, SomeLocalItem.ServerFQDN, true) == 0)
|| (string.Compare(item.Server.FQDN, WithoutDomainLocalFQDN, true) == 0)
原因
运行时
var serviceOfInterest = entity.tbl_Service
.Where(item => string.Compare(item.Name, SomeLocalItem.Name, true) == 0)
.FirstOrDefault(item =>
(string.Compare(item.tbl_Server.FQDN, SomeLocalItem.ServerFQDN, true) == 0)
|| (string.Compare(item.Server.FQDN, WithoutDomainLocalFQDN, true) == 0)
);
我得到了正确的结果。
我感觉不舒服。可能这里的问题真的很简单,但我不能只是看到它。 项目名称中比较的字符串看起来像这样:
“我的真棒物品 - 笔。”
“我的真棒物品 - 祖父枪”
“我很棒的物品 - 我口袋里的东西 - 给你”
任何帮助表示赞赏。我什至可以为这样的问题叫我名字,但我真的真的很需要答案。
非常感谢。
【问题讨论】:
-
您是否使用 string.Compare == 0 来检查是否相等?我相信 Entity Framework 可以更好地理解将字符串与 == 运算符进行比较,因为它允许框架通过分析从 lambda 创建的表达式树对象来构建查询。运算符优先级也可能是问题所在。如果第一个查询评估为 (a && b) || c 它不会返回与实际上是 && (b || c) 的最后一个查询相同的结果。
标签: c# entity-framework ienumerable string-comparison