代码之家  ›  专栏  ›  技术社区  ›  taudep

使用Linq2SQL返回父表数据,但按子表数据排序

  •  1
  • taudep  · 技术社区  · 14 年前

    我与ChildTable有父/子表关系,ChildTable通过ParentId外键链接回ParentTable。对于每个ParentTable记录,ChildTable中有多个记录。对于那些使用你喜欢的初级视觉效果,这里的图表。

    ParentTable
    ------------
    +Id
    Date
    
    ChildTable
    ------------
    +Id
    ParentId
    Date
    

    ParentTable::Id ParentTable::Foo ChildTable:Id ChildData::Foo ChildData::Date
    --------------- ---------------- ------------- -------------- ---------------
    55              Other Values     700           Other values   12/1/2010      
    1               "                1000          "              11/30/2010
    10              "                214           "              10/31/2010
    

    ChildData::Date按降序排序很重要。

    这是最后的答案,感谢温斯顿:

    var results = 
        from p in parent
        join c in (from c2 in child orderby c2.Date descending select c2)
        on p.Id equals c.ParentId into childGroup
        select new { ParentId=p.Id, ParentDate=p.Date, ChildDate=childGroup.First().Date } into NewResult
        orderby NewResult.Activity descending
        select NewResult
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Winston Smith    14 年前

    下面的应该可以,我已经在一些虚拟数据上进行了测试。

    var results = 
        from p in parent
        join c in (from c2 in child orderby c2.Date descending select c2)
        on p.Id equals c.ParentId into childGroup
        select new { ParentId=p.Id, ParentDate=p.Date, ChildDate=childGroup.First().Date };
    

    更新为仅选择所需字段。

        2
  •  0
  •   Si Robinson    14 年前

    试试这样的

    var x = ParentTable.Select(z=> new {
    z.Id,
    z.Foo,
    z.ParentIDChildTable.OrderBy(c=> c.Date).First().ID,
    z.ParentIDChildTable.OrderBy(c=> c.Date).First().Foo,
    z.ParentIDChildTable.OrderBy(c=> c.Date).First().Date
    
    }
    

    在选择子表之前,可能有更好的方法来排序子表,但我想不出。。。 此外,外键可能不是上面键入的,但intellisense应该可以帮助您实现这一点。