Ya hay un DataReader abierto asociado con este comando que debe cerrarse primero

Ya hay un DataReader abierto asociado con este comando que debe cerrarse primero

Esto puede suceder si ejecuta una consulta mientras itera sobre los resultados de otra consulta. No está claro en su ejemplo dónde sucede esto porque el ejemplo no está completo.

Una cosa que puede causar esto es la activación de la carga diferida al iterar sobre los resultados de alguna consulta.

Esto se puede resolver fácilmente al permitir MARS en su cadena de conexión. Añadir MultipleActiveResultSets=true a la parte del proveedor de su cadena de conexión (donde se especifican la fuente de datos, el catálogo inicial, etc.).


Puedes usar el ToList() método antes del return declaración.

var accounts =
from account in context.Accounts
from guranteer in account.Gurantors

 select new AccountsReport
{
    CreditRegistryId = account.CreditRegistryId,
    AccountNumber = account.AccountNo,
    DateOpened = account.DateOpened,
};

 return accounts.AsEnumerable()
               .Select((account, index) => new AccountsReport()
                       {
                           RecordNumber = FormattedRowNumber(account, index + 1),
                           CreditRegistryId = account.CreditRegistryId,
                              DateLastUpdated = DateLastUpdated(account.CreditRegistryId, account.AccountNumber),
                           AccountNumber = FormattedAccountNumber(account.AccountType, account.AccountNumber)}).OrderBy(c=>c.FormattedRecordNumber).ThenByDescending(c => c.StateChangeDate).ToList();


 public DateTime DateLastUpdated(long creditorRegistryId, string accountNo)
    {
        var dateReported = (from h in context.AccountHistory
                            where h.CreditorRegistryId == creditorRegistryId && h.AccountNo == accountNo
                            select h.LastUpdated).Max();
        return dateReported;
    }

usa la sintaxis .ToList() para convertir el objeto leído de db a la lista para evitar que se vuelva a leer. Espero que esto funcione. Gracias.