【发布时间】:2018-08-23 13:58:42
【问题描述】:
我正在尝试获取具有某个字段的所有行 = 该字段的最大值
为了能够解释我的疑问,我会留下一个模型的例子
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());
感谢所有回复!
【问题讨论】:
-
删除 SelectMany。 GroupBy 返回一个二维数组 data[key, values[]]。 Where 或 Select 然后通过键枚举。然后,您可以进行第二次 Select,如下所示: data.Select(x => x.Where(y => .....)).SelectMany(x => x).ToList();
标签: c# linq entity-framework-6 linq-to-entities