使用EF4和Linq
我有一个如下所示的数据结构:
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 ..
在上面的示例数据中,我希望从父版1的版本2获取子ID 2,3,5 ..
答案 0 :(得分:0)
这应符合您的要求..
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});
答案 1 :(得分:0)
我最终使用了这样的子查询:
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 ....);
这样,我得到了数据库中的所有parentid,只有具有该特定父项的最大版本的子项。