【问题标题】:Linq ordering both parent and child related entitiesLinq 对父子相关实体进行排序
【发布时间】:2014-02-04 16:57:59
【问题描述】:

我有一个父子模型,我想按两个实体的 SortOrder 列进行排序。我有查询工作,但它似乎过于冗长,我想知道是否有更简单的解决方案来解决这个问题。

我最初将结果加载到匿名类型中(因为您不能将复杂类型直接加载到实体框架实体中),然后再次查询该类型以加载到实体中。我知道我可以通过实现 DTO 来简化这一点,但我对这个用例的更清洁的解决方案感兴趣。

型号

查询

public List<Group> GetStaticMeasures(int businessUnitID)
{

    var groups = (from g in ctx.Groups.Where(w => w.BusinessUnitID.Equals(businessUnitID)).OrderBy(o => o.SortOrder)
                 select new
                 {
                     ID = g.ID,
                     BusinessUnitID = g.BusinessUnitID,
                     Name = g.Name,
                     SortOrder = g.SortOrder,
                     Datapoints = (from d in ctx.Datapoints where g.ID.Equals(d.StaticGroupID) orderby d.SortOrder select d).ToList()
                 }).ToList();

    var results = from g in groups
                  select new Group
                  {
                      ID = g.ID,
                      BusinessUnitID = g.BusinessUnitID,
                      Name = g.Name,
                      SortOrder = g.SortOrder,
                      Datapoints = g.Datapoints
                  };

    return results.ToList();
}

【问题讨论】:

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


    【解决方案1】:

    怎么样:

    public IEnumerable<Group> GetStaticMeasures(int businessUnitID)
    {
        var groups = ctx.Groups
                       .Include("Datapoints")
                       .Where(w => w.BusinessUnitID.Equals(businessUnitID))
                       .OrderBy(o => o.SortOrder);
    
        foreach(var g in groups)
        {
           g.Datapoints = g.Datapoints.OrderBy(d => d.SortOrder).ToList();
           yield return g;
        }
    }
    

    【讨论】:

    • 它不会在 yield 行上编译为 g 的类型而不是迭代器类型
    • @PhilMurray 是的,我将函数的签名更改为IEnumerable&lt;Group&gt;,但如果您需要将其保留为列表,请创建一个新列表并将值添加到循环中。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    相关资源
    最近更新 更多