AMH
AMH

Reputation: 6451

query cannot be enumerated more than once

I want to do the following

var totalNoOfRows = result.First().TotalNumberOfCount;

And finally do something like that

bookssList.AddRange(retResult.Select(r => r.ToBook()));

where ToBook is extended method

but I always get The result of a query cannot be enumerated more than once.

if (result != null)
                            {

    var totalNoOfRows = result.First().TotalNumberOfCount;
                                pagingContext.ItemsTotal = totalNoOfRows != null ? int.Parse(totalNoOfRows.ToString()) : 0;
                                var retResult = result.ToList();
                               // pagingContext.ItemsTotal = totalcount.Value != null ? int.Parse(totalcount.Value.ToString()) : 0;
                                                                    bookssList.AddRange(retResult.Select(r => r.ToBook()));
                            }

Upvotes: 0

Views: 480

Answers (2)

BartoszKP
BartoszKP

Reputation: 35921

Hard to guess what are you doing, and how these snippets relate to each other, but if you can enumerate a collection only once, then call ToArray first:

var resultCopy = result.ToArray();

//... any number of operations on resultCopy

Note that calling First also counts as enumerating. So you need to enumerate and copy the collection even before this.

Upvotes: 2

p e p
p e p

Reputation: 6674

Try changing the code to this, so you only enumerate result once:

var retResult = result.ToList();
var totalNoOfRows = retResult.First().TotalNumberOfCount;  //You are now using LINQ on the list, not the query!
pagingContext.ItemsTotal = totalNoOfRows != null ? int.Parse(totalNoOfRows.ToString()) : 0;
                               // pagingContext.ItemsTotal = totalcount.Value != null ? int.Parse(totalcount.Value.ToString()) : 0;
Logger.LogInfo("Search Payments GetPaymentsWithCount stored procedure result not null and count=" + totalcount);
bookssList.AddRange(retResult.Select(r => r.ToBook()));

Upvotes: 0

Related Questions