【问题标题】:LINQ query of List of table object returning different results than LINQ-to-SQL query for the same data表对象列表的 LINQ 查询返回与相同数据的 LINQ-to-SQL 查询不同的结果
【发布时间】: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


    【解决方案1】:

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

    修剪 LINQ 查询中的字段现在会产生与 LINQ-to-SQL 查询相同的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2019-08-11
      • 2012-06-22
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多