来自 entity framework 的 FirstOrDefault 中的 C# String.Compare

C# String.Compare in FirstOrDefault from entity framework

我正在失去它... =\

使用 .NET Framework 4 使用 entity framework 到达 MS SQL DB

(仅供参考 - 这是一些看起来很丑陋的代码。因为它用于本地服务,并且永远不会处理大于 ~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)
                            );

它 returns 我是第一个(或空)项目,仅由

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

我得到了正确的结果。

我感觉不舒服。可能这里的问题真的很简单,但我不能只看到它。 项目名称中比较的字符串看起来像这样:

"My Awesome Item - pen."

"My Awesome Item - Grand-pas gun"

"My Awesome Item - something in my pocket - for you"

感谢任何帮助。对于这样的问题,我什至可以骂我,但我真的真的很需要答案。

非常感谢。

试试这个,

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