2016-10-17 27 views
-2

我失去它... = \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槍」

「我真棒項目 - 東西在我的口袋裏 - 你」

任何幫助表示讚賞。我甚至可以稱我爲這樣的問題的名字,但我真的真的很需要答案。

非常感謝提前。

+1

是否使用string.Compare == 0檢查平等?我相信通過Entity Framework可以更好地理解比較字符串與==運算符,因爲它允許框架通過分析從lambda創建的表達式樹對象來構建查詢。 運算符優先級也可能是問題。如果第一個查詢正在評估爲(a && b)|| c它不會返回與最後一個有效地&&(b || c)查詢相同的結果。 –

回答

2

試試這個,

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

你一定是在開玩笑... 謝謝! 對不起人們的愚蠢問題。我不介意管理員是否會刪除它。 – Vital