在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()去重得到準確的結果集;
出現這種問題的原因待研究,暫時記錄一下吧。