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()で提案されているように、合計を行う前に実行しようとしましたが、同じエラーが発生しました。(そして、エラーが発生しなくても、1つのフィールドの合計を取得するためだけにすべてを取得すると、負荷が高くなると思います)

この問題を解決するための提案に非常に感謝します!

更新:問題はすべて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 に答える