在构建动态语句时对实体框架中的子集合进行排序

时间:2012-03-13 16:25:19

标签: c# linq entity-framework entity-framework-4 linq-to-entities

我有一段时间让这个工作 - 所有在线工作样本都不符合我的需要。

我正在尝试在构建实体框架语句时对子集合进行排序..

有问题的一行是:

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();

我完全失去了,无法在网上找到任何解决方案如何解决这个问题 - 我需要以这种方式进行排序,因为我也在进行分页和限制 - 如果订购完成之后它只会订购特定的“页面”或“结果集” - 而不是在发生分页之前对整个结果集进行排序(我希望这是有道理的。大笑)

提前致谢!!!

1 个答案:

答案 0 :(得分:2)

我认为改变它应该会有所帮助。如果没有发布完整的错误消息

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