【发布时间】:2016-02-04 17:18:22
【问题描述】:
在我的 ASP.NET MVC 5 项目中,我想获取一个 LINQ-to-SQL 查询结果并将其保存在内存中以进行进一步的查询,而不是每次都访问数据库。但是,当将这些结果放入列表中,然后进一步应用 where 子句时,我最终没有结果,因为直接从数据库应用于查询的相同 where 子句确实返回结果。
这会返回我列表中的项目:
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 逻辑:
.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")))
这两种方法不应该返回相同的东西有意义吗?也许 where 子句中的某些东西让我的行为与我习惯的不同?
谢谢。
【问题讨论】:
标签: c# sql-server asp.net-mvc linq linq-to-sql