【问题标题】:LINQ OrderBy/ThenBy ChildrenCollection.SortOrderLINQ OrderBy/ThenBy ChildrenCollection.SortOrder
【发布时间】:2012-04-17 16:06:52
【问题描述】:

编辑:

此示例中的两个查询均未按位置排序顺序排序。有人对如何做到这一点有任何建议吗?

我需要一些帮助来按子实体列对组的实体集合进行排序。我有从组到位置的一对多关系。

我需要按组名排序,然后按位置排序。

由于子实体是一个集合,我遇到了麻烦。

这是我正在使用但返回重复的代码:

 var groups = db.GetNavigationGroups()
    .Where(g => selectedLocation > 0 ? g.NavigationGroupLocations.Any(l => l.Location == selectedLocation) : true)
    .SelectMany(g => g.NavigationGroupLocations, (g, l) => new { g, l })
    .OrderBy(x => x.g.Name)
    .ThenBy(x => x.l.SortOrder)
    .Select(x => x.g);

然后我使用 FirstOrDefault() 尝试了这种方法:

 List<NavigationGroup> groups = db.DataModel.NavigationGroups
    .Where(g => selectedLocation > 0 ? g.NavigationGroupLocations.Any(l => l.Location == selectedLocation) : true)
    .OrderBy(g => g.Name)
    .ThenBy(g => g.NavigationGroupLocations.Where(l => l.Location == selectedLocation && l.GroupID == g.ID).OrderBy(l => l.SortOrder).FirstOrDefault())
    .ToList();

问题是我似乎无法根据位置 SortOrder 列按我需要的顺序获取组。

【问题讨论】:

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


    【解决方案1】:

    您的第二个查询看起来像是在尝试按 NavigationGroupLocations 对象而不是按其字段进行排序。你试过了吗:

    List<NavigationGroup> groups = db.DataModel.NavigationGroups
    .Where(g => selectedLocation > 0 ? g.NavigationGroupLocations.Any(l => l.Location == selectedLocation) : true)
    .OrderBy(g => g.Name)
    .ThenBy(g => g.NavigationGroupLocations.Where(l => l.Location == selectedLocation && l.GroupID == g.ID).OrderBy(l => l.SortOrder).FirstOrDefault().SortOrder)
    .ToList();
    

    您可能还想将您的 selectedLocation 条件添加到 order 子句中。

    List<NavigationGroup> groups = db.DataModel.NavigationGroups
    .Where(g => selectedLocation > 0 ? g.NavigationGroupLocations.Any(l => l.Location == selectedLocation) : true)
    .OrderBy(g => g.Name)
    .ThenBy(g => g.NavigationGroupLocations.Where(l => selectedLocation > 0 ? l.Location == selectedLocation : true && l.GroupID == g.ID).OrderBy(l => l.SortOrder).FirstOrDefault().SortOrder)
    .ToList();
    

    【讨论】:

      猜你喜欢
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 2018-09-16
      • 2021-04-17
      • 1970-01-01
      相关资源
      最近更新 更多