Select 最大值作为 Linq 的第二个标准
Select max as second criteria with Linq
我正在尝试获取所有具有某个字段的行 = 该字段的最大值
为了能解释我的疑惑,留个模型的例子
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());
感谢所有回复!
data = data.GroupBy(x => x.Revision).Select(revisitions => revisitions.OrderByDescending(x => x.Key).First())
试试这个
data = data..GroupBy(x => x.Key).OrderByDescending(x => x.Key).Select(x => new { Key = x.Key, Revision = x.Count() });
var result = data.GroupBy(x => x.Revision).Select(x => x.First())
如果您在第一次查询后尝试执行任何其他操作(例如 select 列的子集)- 您需要使用 x.FirstOrDefault
我正在尝试获取所有具有某个字段的行 = 该字段的最大值
为了能解释我的疑惑,留个模型的例子
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());
感谢所有回复!
data = data.GroupBy(x => x.Revision).Select(revisitions => revisitions.OrderByDescending(x => x.Key).First())
试试这个
data = data..GroupBy(x => x.Key).OrderByDescending(x => x.Key).Select(x => new { Key = x.Key, Revision = x.Count() });
var result = data.GroupBy(x => x.Revision).Select(x => x.First())
如果您在第一次查询后尝试执行任何其他操作(例如 select 列的子集)- 您需要使用 x.FirstOrDefault