用Linq选择max作为第二个条件

时间:2018-08-23 13:58:43

标签: c# linq entity-framework-6 linq-to-entities

我正在尝试获取具有某个字段=该字段的最大值的所有行

为了能够解释我的疑问,我将举一个模型的例子

class model
{
    [Key]
    [Column(Order=0)]
    public int Key { get; set; }     

    [Key]
    [Column(Order=1)]
    public int Revision { get; set; }

    public string OtherStuff { get; set; }    
}

一个数据示例可能是

|Key|Revision   |Otherstuff |
|1  |1          |A          |
|1  |2          |B          |
|1  |3          |C          |
|2  |1          |D          |
|2  |2          |E          |
|3  |1          |F          |

我想要得到的:

|Key|Revision   |Otherstuff |
|1  |3          |C          |
|2  |2          |E          |
|3  |1          |F          |

我尝试了可以​​找到here的解决方案,但我无法解决问题

这就是我所得到的

IQueryable<model> data = dbContext.model;

data = data.GroupBy(x => x.Revision ).OrderByDescending(x => x.Key).SelectMany(x => x)

//Applying logic to filter the data 
data = data.Where(...)

我的主要问题是这是一种过滤方法,当使用SelectMany时,数据库已处置,我无法根据需要继续修改列表

我该怎么做?

谢谢!

已解决

data = data.GroupBy(x => x.Key).Select(x => x.OrderByDescending(d => d.Revision).FirstOrDefault());

感谢所有回复!

3 个答案:

答案 0 :(得分:2)

尝试一下

data = data..GroupBy(x => x.Key).OrderByDescending(x => x.Key).Select(x => new { Key = x.Key, Revision = x.Count() });

答案 1 :(得分:1)

var result = data.GroupBy(x => x.Revision).Select(x => x.First())

如果您在第一次查询后尝试执行其他任何操作(例如选择列的子集),则需要使用x.FirstOrDefault

答案 2 :(得分:0)

data = data.GroupBy(x => x.Revision).Select(revisitions => revisitions.OrderByDescending(x => x.Key).First())