Listing books by priority #region GetBookListByPriority
private static List&lt;BCBook&gt; GetBookListByPriority(List&lt;BCBook&gt; listBcBook)
{
    List&lt;BCBook&gt; newList = new List&lt;BCBook&gt;();
    try
    {
        List&lt;BCBook&gt; listNonPriorityBcBooks = new List&lt;BCBook&gt;();
        List&lt;BCBook&gt; listPriorityBcBooks = new List&lt;BCBook&gt;();

        foreach (BCBook bcBook in listBcBook)
        {
            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);
            }
        }
        int count = 0;
        int prio = 0;
        foreach (BCBook bcBook in listNonPriorityBcBooks)
        {
            for (int j = count + 1; j &lt;= 5; j++)
            {
                List&lt;BCBook&gt; listBook = new List&lt;BCBook&gt;();
                listBook = ListBookPriority(listPriorityBcBooks, j, newList);
                count++;
                if (listBook.Count() &gt; 0)
                {
                    prio++;
                }
                else
                {
                    break;
                }
                foreach (BCBook bc in listBook)
                {
                    newList.Add(bc);
                }
            }
            newList.Add(bcBook);
        }
    }
    catch (Exception ex)
    {
        ErrorLogger.WriteErrorToLog(ex);
    }

    return newList;
}
#endregion

#region ListBookPriority
private static List&lt;BCBook&gt; ListBookPriority(List&lt;BCBook&gt; list, int priority, List&lt;BCBook&gt; newList)
{

    List&lt;BCBook&gt; listBook = new List&lt;BCBook&gt;();
    try
    {
        foreach (BCBook vid in list)
        {
            if (!IsExists(newList, vid.id.ToString(CultureInfo.CurrentCulture)))
            {
                if (vid.Priority == priority)
                {
                    listBook.Add(vid);
                }
            }
        }
    }
    catch (Exception ex)
    {
        ErrorLogger.WriteErrorToLog(ex);
    }
    return listBook;
} 
#endregion
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.