如果存在自引用层次结构的记录,我想获取每个组的最新记录。
我的表格如下:
RecordId CreatedDate ParentRecordId
1 2012/05/13 NULL
2 2012/05/13 NULL
3 2012/05/14 1
4 2012/05/15 3
我想只选择最新版本的记录 所以在这种情况下我只想选择RecordId = 2和RecordId = 4。
到目前为止,这是我所拥有的,而且我被卡住了。
db.Records
.Where(x => x.ParentRecordId!= null).GroupBy(x => x.ParentRecordId)
.SelectMany(x=>x.OrderByDescending(y=>y.CreatedDate).Take(1)).ToList();
答案 0 :(得分:2)
我的左连接有点缺乏,但是这样的事情应该这样做;
var query = from r1 in db.Records
join r2 in db.Records
on r1.RecordId equals r2.ParentRecordId into rec
from r in rec.DefaultIfEmpty()
where r == null
select r1;
答案 1 :(得分:1)
如何回答“获取没有其他条目认为我是父母的条目”的查询。这听起来像是一回事,除非我误解:
db.Records.Where(x => !db.Records
.Select(r => r.ParentRecordId).Contains(x.RecordId))
但是,我对“圆形”的含义感到有些困惑。层次结构如何成为循环?
答案 2 :(得分:1)
首先应该获得ParentRecordId
的列表,然后检查RecordId
是否在该列表中,如果是,那么我们应该从结果中排除它:
var parentIds = db.Records
.Where(r => r.ParentRecordId != null)
.Select(r => r.ParentRecordId)
// this ToList call may increase performance. Depending
// on the size of the result set we may not want to call
// the database every time for this info
.ToList();
var wantedRecords = from r in db.Records
where !parentIds.Contains(r.RecordId)
select r;