Entity framework选择具有某一列最大值的行

4
我有一个拥有约20列的表。我想获取每个ID最大“version”列的所有列的行。
ID      | Version | Other data
--------+---------+----------
1       | 1       | text1
1       | 2       | text2
1       | 3       | text3
2       | 1       | text1
3       | 1       | text1
3       | 2       | text2

我的要求是:

ID      | Version | Other data
--------+---------+----------
1       | 3       | text3
2       | 1       | text1
3       | 2       | text2

我知道如何在SQL中实现它。但是我不知道如何在Entity Framework中实现。特别是当我有20列的时候。

2个回答

1
context.TableName
    .GroupBy(x=>x.ID)
    .Select(x=>new 
    {
        ID = x.Key, 
        row = x.Where(r=>r.Version == x.Max(m=>m.Version)).FirstOrDefault()})
    .Select(x=>new {x.ID, x.row.Version, x.row.OtherData});

我写了我有20列。而你正在创建新的匿名类型。我想要原始类型,它与数据库中的原始行相连接。 - Marcin1199
我自己创建了一个,但速度非常慢。 context.TableName.GroupBy(x=> x.ID) .SelectMany( group=> group.Where( r=> r.version == group.Max(x => x.version)) .Select(r=> r)); - Marcin1199

0
我创建了自己的版本,但是它很慢。
context.TableName.GroupBy(group=> group.recipeID)
                        .SelectMany(
                            group=>
                                group.Where(
                                    r=> r.version == group.Max(x => x.version))
                                    .Select(r=> r));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接