2016-02-04 28 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查询产生相同的结果。