Listing books by priority
I would get rid of foreach and use for. I have found (and read about) a huge performance difference between the 2 (EDIT, but not always, see below). 

Example (untested code):

int c  = listBcBook.Count;

for (int i = 0; i &lt; c; i++)
{
    BCBook bcBook = listBcBook[i];

    BookHistoryDto historyDto = new BookHistoryFacade().FindHistoryByBookIdByPriority(bcBook.id.ToString(CultureInfo.CurrentCulture));
    if (historyDto != null &amp;&amp; historyDto.HistoryId &gt; 0)
    {
        bcBook.Priority = historyDto.Priority;
        listPriorityBcBooks.Add(bcBook);
    }
    else
    {
        listNonPriorityBcBooks.Add(bcBook);
    }
}


EDIT: I just read that the performance difference isn't always there because in some cases, the compiler will optimize your foreach loops into for loops. Here is a good read over on SO: https://stackoverflow.com/questions/1124753/for-vs-foreach-loop-in-c. 

In your case, because you're using a List, directly using for should be faster.