我有一个父/子表关系,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
答案 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应该帮助你。