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

时间:2016-09-26 17:15:08

标签: c# linq

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已经通过连接几个表来填充。在执行此操作时,它在具有2个不同数据库的2个环境中表现不同。

调试时,我发现

环境1:List2有数据。 list2Variable按预期从List2填充。

环境2:List2有数据。 每次在循环内查询List2时,它会在循环内部进行DB调用。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

List2很可能是表示针对数据库的延迟查询的IQueryable实例;直到您遍历查询然后才实际执行查询。所以当你这样做时:

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

...它正在查询您的查询的where子句,而Any实际上会导致查询执行。

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

List2 = (some LINQ stuff).ToList();
相关问题