我失去它... = \C#String.Compare在FirstOrDefault從實體框架
使用.NET Framework 4 使用實體框架去MS SQL數據庫
(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)
);
我得到正確的結果。
我感覺不舒服。可能是這裏的問題非常簡單,但我不能僅僅看到它。 比較項目名稱中的字符串看起來像這樣:
「我的真棒項目 - 鋼筆。」
「我真棒項目 - 大-PAS槍」
「我真棒項目 - 東西在我的口袋裏 - 你」
任何幫助表示讚賞。我甚至可以稱我爲這樣的問題的名字,但我真的真的很需要答案。
非常感謝提前。
是否使用string.Compare == 0檢查平等?我相信通過Entity Framework可以更好地理解比較字符串與==運算符,因爲它允許框架通過分析從lambda創建的表達式樹對象來構建查詢。 運算符優先級也可能是問題。如果第一個查詢正在評估爲(a && b)|| c它不會返回與最後一個有效地&&(b || c)查詢相同的結果。 –