从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调用。

任何想法?

从DB填充的列表在查询时再次调用DB

List2很可能是IQueryable实例,表示对数据库的延迟查询;直到你遍历查询,查询才会真正执行。当你这样做的时候:

!List2.Where(a => a.TaxFormLineId == item.TaxFormLineId).Any(a => a.EmptyAmounts == false);

…它将where子句添加到查询中,而Any实际上将导致查询执行。

如果您希望List2预先填充数据,并且WhereAny针对预取的数据进行测试,而不是针对数据库,则需要将List2转换为类似列表的东西:

List2 = (some LINQ stuff).ToList();