表对象列表的 LINQ 查询返回的结果与针对相同数据的 LINQ 到 SQL 查询不同

本文关键字:查询 LINQ 数据 SQL 列表 对象 返回 结果 | 更新日期: 2023-09-27 18:33:19

在我的 ASP.NET MVC 5项目中,我想获取LINQ-to-SQL查询结果并将其保留在内存中以执行进一步的查询,而不是每次都命中数据库。 但是,当这些结果放在列表中,然后在应用子句的位置进一步应用时,我最终没有结果,因为直接从数据库应用于查询的相同 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 条款中的某些东西给了我与我习惯不同的行为?

谢谢。

表对象列表的 LINQ 查询返回的结果与针对相同数据的 LINQ 到 SQL 查询不同

看起来某些数据库字段的值后有空格。 由于没有字符串等效性,LINQ 会丢弃记录,但显然 LINQ-to-SQL 在应用 where 子句时忽略了填充。

现在,修整 LINQ 查询

中的字段将产生与 LINQ to-SQL 查询相同的结果。