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

时间:2010-10-01 11:39:45

标签: c# sql linq-to-sql

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

ParentTable
------------
+Id
Date

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

我要做的是为每个加入最近的ChildTable日期值的ParentTable项返回一条记录(注意,而不是父级的日期值)。结果如下:

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按降序排序非常重要。

这看起来应该很简单,但我正在努力解决它的LinQ2SQL问题。当我能在Linq思考的时候,我还在等待我的“啊哈”时刻。

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

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 个答案:

答案 0 :(得分:1)

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

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 };

已更新,仅选择所需的字段。

答案 1 :(得分:0)

尝试类似

的内容
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

}

在选择之前可能有更好的方法来订购Child表但我想不到它...... 外键也可能不是上面输入的类型,但intellisense应该帮助你。