猿问

已经有一个与此命令关联的打开DataReader,必须先关闭该命令

已经有一个与此命令关联的打开DataReader,必须先关闭该命令

我有这个查询,并得到这个函数中的错误:

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);public DateTime DateLastUpdated(long creditorRegistryId, string accountNo){
    return (from h in context.AccountHistory
            where h.CreditorRegistryId == creditorRegistryId && h.AccountNo == accountNo            select h.LastUpdated).Max();}

错误是:

与此命令关联的已打开的DataReader必须先关闭。

最新情况:

堆栈跟踪添加:

InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.]
   System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command) +5008639
   System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command) +23
   System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async) +144
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior,
    Boolean returnStream, String method, DbAsyncResult result) +87
holdtom
浏览 1264回答 3
3回答

哈士奇WWW

如果在迭代来自另一个查询的结果时执行查询,则会发生这种情况。从您的示例中不清楚这是在哪里发生的,因为该示例尚未完成。导致这种情况的一个原因是在迭代某些查询的结果时触发了延迟加载。这可以很容易地解决,允许火星在你的连接字符串。加MultipleActiveResultSets=true连接字符串的提供者部分(其中指定了数据源、初始目录等)。

qq_笑_17

使用语法.ToList()将从db读取的对象转换为List,以避免再次读取。希望这对它有用。谢谢。
随时随地看视频慕课网APP
我要回答