Linq GroupBY TakeWhile?
问题描述:
使用EF4和LINQLinq GroupBY TakeWhile?
我有一个数据结构,它看起来像这样:
parentid childid version
1 2 1
1 3 1
1 4 1
1 2 2
1 3 2
1 5 2
...
也就是说,我要选择的parentid,childID的但只适用于最高版本,对于每一个parentId的有在数据库中。
我第一次尝试是这样的:
var links = data
.GroupBy (link => link.parentid)
.Select(ig => ig.OrderByDescending(link => link.version).First())
.Select (link => new .......);
然而,这显然只能选择子ID对每个父ID之一..
在样本数据上面我想孩子IDS 2,3,5从版本2母1是..
答
最后我用这样的子查询:
var links = data
.OrderBy(link => link.parentid)
.ThenBy(link => link.childid)
.Where(o => o.version == data
.Where(i => i.version == o.version).Max(l => l.version))
.Select(link => new ....);
这样,我得到在db所有的parentid与只与孩子们该特定父级的最大版本。
答
这应该满足你的要求..
var links = data.Where(x => x.version == data.Max(y => y.version))
.OrderBy(x => x.childid)
.Select(x => new {parentid = x.parentid, childid = x.childid});
,如果你只需要母公司1,则
var links = data.Where(x => x.version == data.Max(y => y.version))
.Where(x => x.parentid == 1)
.OrderBy(x => x.childid)
.Select(x => new {parentid = x.parentid, childid = x.childid});
+0
那甚至没有有效的代码。版本是一个标量字段,因此不能用于最大查询.. – 2012-03-23 13:26:05
+0
是的..但我想你有想法..请检查更新.. – Flowerking 2012-03-23 13:43:48
您应该按照parentid进行分组,并按照版本分组。我现在没有时间去解决问题。如果仍然有必要,我会稍后再试。 – 2012-03-24 22:09:46