C# 在实体框架中排序子集合,同时生成动态语句
我花了很长时间来完成这项工作——所有在线工作的样本都不符合我的需要 我试图在构建实体框架语句时对子集合进行排序 问题在于:C# 在实体框架中排序子集合,同时生成动态语句,c#,linq,entity-framework,entity-framework-4,linq-to-entities,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 = 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();
我完全不知所措,无法在网上找到任何解决方案如何解决这个问题-我需要以这种方式进行排序,因为我也在进行分页和限制-如果之后进行排序,它将只排序特定的“页面”或“结果集”-而不是在分页发生之前排序整个结果集(我希望这是有意义的..哈哈)
提前感谢!!!我认为这样更改应该会有所帮助。如果没有,请发布完整的错误消息
TradesFilter =
SortDirection.Equals(SortDirection.Ascending) ?
TradesFilter.OrderBy(s => s.TradeLineItems.Min(t => TradeDateTime)) :
TradesFilter.OrderBy(s => s.TradeLineItems.Max(t => TradeDateTime));
天哪,非常感谢你!!!!!!!!!!!!!!!!!老兄…我一整天都在为这个问题头痛…你太棒了…@Loren-我很高兴我能帮上忙