0

这是我正在尝试做的事情:

IEnumerable<OfficeView> allOffices = GetAllOffices(); //this method also uses some linq query
foreach (var office in allOffices)
{
    officeSales.Add(
             new Tuple<int, decimal>(office.Id, GetSaleAmount(office.Id, someParams)));
}


public decimal GetAgentSaleAmount(int officeRef, someTypes someParams)
{
    var q = ObjectQuery.Where
                (i => i.officeId == officeRef && i.someOtherStuff == someParams)
                .ToList();

    return q.Sum(i => i.NetPrice);
}

我无法设置MultipleActiveResultSets = true。相反,正如这里所建议的,我在求和之前尝试.ToList()做,但得到了同样的错误。(即使我不会得到错误,我认为它会导致繁重的负载来获取所有内容只是为了获得一个字段的总和)

我将非常感谢任何解决此问题的建议!

更新:问题是关于GetAllOffices(),它返回IEnumerable(它保持DataReader开放)。我如下更改了第一行,它起作用了。非常感谢大家:)

IEnumerable<OfficeView> allOffices = GetAllOffices().ToList();
4

2 回答 2

2

错误说阅读器已经打开,这意味着您已经运行了一些需要关闭的查询。写入.ToList()该 linq 查询并对其他查询执行相同操作。

于 2013-07-29T05:35:48.097 回答
1

我认为您正在尝试同时进行添加查询。在尝试计算销售价值之前,您需要完成将“销售”对象添加到“销售”集合中。

换句话说,在事务提交之前您无法查询。希望有帮助。

于 2013-07-29T06:50:04.040 回答