Сортировка дочерней коллекции в Entity Framework при построении динамического оператора - PullRequest
1 голос
/ 13 марта 2012

У меня очень много времени, чтобы заставить это работать - все рабочие образцы онлайн не соответствуют моим потребностям.

Я пытаюсь отсортировать дочернюю коллекцию при построении своего оператора структуры сущности ..

проблемная строка:

TradesFilter = SortDirection.Equals(SortDirection.Ascending) ? TradesFilter.OrderBy(s => s.TradeLineItems.OrderBy(t => t.TradeDateTime).Select(t => t.TradeDateTime).FirstOrDefault()) : TradesFilter.OrderByDescending(s => s.TradeLineItems.OrderByDescending(t => t.TradeDateTime).Select(t => t.TradeDateTime).FirstOrDefault());

ошибка, которую я получаю: System.NotSupportedException: указанный метод не поддерживается.

вот мой пример кода:

using (myentities db = new myentities())
    {
        var TradesFilter = db.Trades.Include("TradeLineItems").AsQueryable();

        totalRecords = TradesFilter.Count();

        #region SORTING
        if (SortColumn == "ID")
        {
            TradesFilter = SortDirection.Equals(SortDirection.Ascending) ? TradesFilter.OrderBy(s => s.TradeId) : TradesFilter.OrderByDescending(s => s.TradeId);
        }
        else if (SortColumn == "Title")
        {
            TradesFilter = SortDirection.Equals(SortDirection.Ascending) ? TradesFilter.OrderBy(s => s.Title) : TradesFilter.OrderByDescending(s => s.Title);
        }
        else if (SortColumn == "StockCode")
        {
            TradesFilter = SortDirection.Equals(SortDirection.Ascending) ? TradesFilter.OrderBy(s => s.StockCode) : TradesFilter.OrderByDescending(s => s.StockCode);
        }
        else if (SortColumn == "Company")
        {
            TradesFilter = SortDirection.Equals(SortDirection.Ascending) ? TradesFilter.OrderBy(s => s.Company) : TradesFilter.OrderByDescending(s => s.Company);
        }
        else if (SortColumn == "TradeDate")
        {
            TradesFilter = SortDirection.Equals(SortDirection.Ascending) ? TradesFilter.OrderBy(s => s.TradeLineItems.OrderBy(t => t.TradeDateTime).Select(t => t.TradeDateTime).FirstOrDefault()) : TradesFilter.OrderByDescending(s => s.TradeLineItems.OrderByDescending(t => t.TradeDateTime).Select(t => t.TradeDateTime).FirstOrDefault());
        }
        else if (SortColumn == "Result")
        {
            TradesFilter = SortDirection.Equals(SortDirection.Ascending) ? TradesFilter.OrderBy(s => s.Result) : TradesFilter.OrderByDescending(s => s.Result);
        }
        else
        {
            TradesFilter = TradesFilter.OrderByDescending(s => s.TradeId);
        }
#endregion
/* DO A WHOLE BUNCH MORE STUFF - SORTING, PAGING, LIMITING,FILTERING - ALL CUT OUT AS UNNECESSARY TO THE QUESTION */
Trades = TradesFilter.ToList();

Я нахожусь в полной растерянности и не могу найти никакого решения в Интернете, как решить эту проблему - мне нужно сделать заказ таким образом, потому что я также делаю пейджинг и ограничение - если заказ сделан позже, он будет только заказывать эта конкретная «страница» или «набор результатов» - вместо того, чтобы упорядочивать весь набор результатов до того, как произойдет разбиение по страницам (надеюсь, это имеет смысл .. lol)

спасибо заранее !!!

1 Ответ

2 голосов
/ 13 марта 2012

Я думаю, что изменение этого должно помочь.Если не опубликовать полное сообщение об ошибке

TradesFilter =
  SortDirection.Equals(SortDirection.Ascending) ?
  TradesFilter.OrderBy(s => s.TradeLineItems.Min(t => TradeDateTime)) :
  TradesFilter.OrderBy(s => s.TradeLineItems.Max(t => TradeDateTime));
...