Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架的FirstOrDefault中的比较_C#_Entity Framework_Ienumerable_String Comparison - Fatal编程技术网

C# 实体框架的FirstOrDefault中的比较

C# 实体框架的FirstOrDefault中的比较,c#,entity-framework,ienumerable,string-comparison,C#,Entity Framework,Ienumerable,String Comparison,我要失去它=\ 使用.NETFramework 4 使用实体框架访问MS SQL数据库 以下是一些难看的代码。因为它是用于本地服务的,并且永远不会处理大于~1000行的表,所以选择的工具集或多或少是可以接受的 运行下一个代码 var itemOfInterest = entity.tbl_Items .FirstOrDefault(item => string.Compa

我要失去它=\

使用.NETFramework 4 使用实体框架访问MS SQL数据库

以下是一些难看的代码。因为它是用于本地服务的,并且永远不会处理大于~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)
                               );
我得到了正确的结果

我觉得不舒服。也许这里的问题真的很简单,但我不能仅仅看到它。 项目名称中比较的字符串看起来类似于:

我最棒的东西——钢笔

我最棒的道具-格兰德帕斯枪

我的绝妙物品-口袋里的东西-给你

谢谢你的帮助。对于这样的问题,我甚至可以直呼其名,但我真的需要答案

非常感谢。

试试这个

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==0检查是否相等?我认为实体框架更好地理解字符串与==运算符的比较,因为它允许框架通过分析lambda创建的表达式树对象来构建查询。运算符优先级也可能是一个问题。如果第一个查询的计算结果是a&&b||c,那么它将不会返回与上一个查询相同的结果,而上一个查询实际上是a&&b|c。你一定是在开玩笑吧。。。谢谢抱歉,各位问了这个愚蠢的问题。我不介意管理员是否会删除它。