Linq查詢結果集比對應的sql語句查詢結果集不一致,存在重複結果

    在MVC架構的基礎上開發,當然少不了Linq的身影.
    Linq的推出,讓我們從結構化查詢語言的語法中解放出來,它是建立在ado.net及C#的基礎上,自動將Linq語句翻譯成sql語句,同時將結果集返回.
   相對於sql而言,Linq to sql在編譯時就檢查語法的正確性;而SQL語句則不同,通過拼接字符串的形式組合成我們需要的SQL語句,只有在運行時才能驗證其正確性。
    Linq語句看着邏輯清晰、語句簡潔,然而在代碼調試時卻沒有拼接字符串的sql語句那麼直接、簡單、易懂……
…..
    扯得有點遠啦,主要是想記錄一下今天遇到的問題:發現Linq查詢視圖得到的結果集與轉換後sql語句的結果集不一致,Linq結果集中的Count數量大於SQL查詢的結果集,即Linq結果集中存在重複數據!!!

eg:Linq語句
    var users=from b in VUserInfo---VUserInfo爲視圖
                    where b.CustGuid.Equals('4dc41e6b-0a1d-4a29-b6e2-6dddb987f320')
                    select b;

結果集爲

                   列1                     CustGuid
          1       001         4dc41e6b-0a1d-4a29-b6e2-6dddb987f320
          2       002         4dc41e6b-0a1d-4a29-b6e2-6dddb987f320
          3       002         4dc41e6b-0a1d-4a29-b6e2-6dddb987f320(存在重複數據,與上述數據完全一致)


如果採用sql語句查詢:select * from VUserInfo where CustGuid='4dc41e6b-0a1d-4a29-b6e2-6dddb987f320'

結果集爲

                   列1                     CustGuid
          1       001         4dc41e6b-0a1d-4a29-b6e2-6dddb987f320
          2       002         4dc41e6b-0a1d-4a29-b6e2-6dddb987f320(此結果集正確)




       那麼可以通過users.Distinct()去重得到準確的結果集;
       出現這種問題的原因待研究,暫時記錄一下吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章