2016-02-04 31 views
0

在我的ASP.NET MVC 5項目中,我想採用LINQ-to-SQL查詢結果並將其保存在內存做進一步的查詢,而不是每次都擊中數據庫。但是,如果將這些結果放入列表中,然後進一步應用子句,則最終將得不到結果,因爲直接從數據庫應用於查詢的where子句確實會返回結果。LINQ查詢的表對象列表返回的結果不同於LINQ-to-SQL對同一數據的查詢結果

這將返回我的列表中的項目:

DataContext db = new DataContext(); 
var data = db.myView.Where(x => [where clauses]).ToList(); 

這並不在我的列表中返回的項目:

DataContext db = new DataContext(); 
var data1 = db.myView.ToList(); 
var data2 = data1.Where(x => [where clauses]).ToList(); 

我用這個方法從內存中查詢,而而不是直接從數據庫中獲得大量次數,並且從未在結果中看到過任何差異。

下面是實際的,其中的邏輯:

.Where(x => ((((DateTime)x.DINVPDOF).Year == year && ((DateTime)x.DINVPDOF).Month == month && x.SOPNUMBE.Trim().ToUpper().StartsWith("SINV")) || ((x.DOCDATE >= new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(-1) && x.DOCDATE <= new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddDays(-1)) && (x.SOPNUMBE.Trim().ToUpper().StartsWith("CR") || x.SOPNUMBE.Trim().ToUpper().StartsWith("RC")))) && (x.USCATVLS_6 == "FGS") && (x.QUANTITY == 1) && !x.CUSTCLAS.Contains("SER") && (x.SLPRSNID != "HOUSE") && !(x.ITEMDESC.Contains("RETURN") && !x.ITEMDESC.Contains("CREDIT"))) 

是否有意義,這兩種方法應該永遠不會返回同樣的事情?也許在哪些條款中給我的行爲與我習慣的不同?

謝謝。

回答

0

看起來有些數據庫字段在值之後有空格。由於沒有字符串等價性,LINQ拋出了記錄,然而顯然LINQ-to-SQL在應用where子句時忽略了填充。

修剪LINQ查詢中的字段與LINQ-to-SQL查詢產生相同的結果。