从DB填充的列表在查询时再次调用DB
本文关键字:DB 调用 查询 填充 列表 | 更新日期: 2023-09-27 18:08:59
foreach (var item in ReturnList)
{
if (item.EmptyAmounts)
{
var list2Variable = !List2.Where(a => a.TaxFormLineId == item.TaxFormLineId).Any(a => a.EmptyAmounts == false);
item.EmptyAmounts = list2Variable ;
}
}
在上面的代码中,通过连接几个表已经填充了List2。当执行此操作时,它在两个不同数据库的两个环境中表现不同。
在调试时,我发现
环境1:列表2有数据。按照预期从List2填充list2Variable。
Env 2: List2有数据。每次在循环内查询List2时,在循环内进行DB调用。
任何想法?
List2
很可能是IQueryable
实例,表示对数据库的延迟查询;直到你遍历查询,查询才会真正执行。当你这样做的时候:
!List2.Where(a => a.TaxFormLineId == item.TaxFormLineId).Any(a => a.EmptyAmounts == false);
…它将where
子句添加到查询中,而Any
实际上将导致查询执行。
如果您希望List2
预先填充数据,并且Where
和Any
针对预取的数据进行测试,而不是针对数据库,则需要将List2
转换为类似列表的东西:
List2 = (some LINQ stuff).ToList();