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调用。
有什么想法吗?
答案 0 :(得分:1)
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();