【问题标题】:C# String.Compare in FirstOrDefault from entity framework实体框架中 FirstOrDefault 中的 C# String.Compare
【发布时间】: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


【解决方案1】:

试试这个,

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)));

【讨论】:

  • 你在开玩笑吧...谢谢!对不起,愚蠢的问题。我不介意它是否会被管理员删除。
猜你喜欢
  • 2011-03-29
  • 2016-06-27
  • 2017-11-29
  • 2019-10-24
  • 2020-01-07
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多