2012-12-03 40 views
1

我有一個查詢(在SQL中),我在SSMS中運行並獲得結果集與32行,就像我想要的。當在內存數據上使用LINQ查詢返回錯誤的結果

然後,我將SQL查詢逐行轉換爲LINQ查詢,並在Visual Studio中對同一數據庫運行它,並獲取32行的列表 - 就像我想要的那樣。

問題來了。 如果我做這樣的事情

MyEntities entities = new MyEntities(); 
List<MyEntity> resultset = entities.MyEntity.ToList(); 

...和我的運行對內存中的數據收集LINQ查詢我只得到27行,現在一些行的重複,使他們甚至沒有不同 - 但他們當然在數據庫中。

我認爲這是因爲LINQ在向數據庫發送查詢時產生SQL(所以結果是正確的),但是當目標是內存數據結構時做其他事情。不知道這裏發生了什麼。有什麼想法嗎?提前致謝!

編輯:只是爲了澄清。這給出正確的結果

List<MyEntity> results = entities.MyEntity.Where(x => x == ...).ToList(); 

這不

MyEntities entities = new MyEntities(); 
List<MyEntity> listData = entities.MyEntity.ToList(); 

List<MyEntity> results = listData.Where(x => x == ...).ToList(); 
+0

什麼是生成的SQL查詢?檢入SQL Server Profiler。 –

+2

這種差異的一個常見原因是Sql(通常)不區分大小寫,其中linq與對象區分大小寫。 – sgmoore

+0

不幸的是,我沒有權限在服務器上運行跟蹤。 也許我還不夠清楚..當我說當查詢直接對數據庫運行時返回正確的結果,這就是我的意思.. 列表結果= entities.MyEntity.Where(x = > x = ..)。ToList(); –

回答

1

解決它!

解決的辦法是在數據庫表中設置一個主鍵。

無論如何感謝:)