C# 实体框架的FirstOrDefault中的比较
我要失去它=\ 使用.NETFramework 4 使用实体框架访问MS SQL数据库 以下是一些难看的代码。因为它是用于本地服务的,并且永远不会处理大于~1000行的表,所以选择的工具集或多或少是可以接受的 运行下一个代码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
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。你一定是在开玩笑吧。。。谢谢抱歉,各位问了这个愚蠢的问题。我不介意管理员是否会删除它。