linq - 从包含最大 DateTime 值的每个组中选择单个元素
问题描述
模型 :
public class ReferenceParameterHistory
{
[Key]
public int IDReferenceParameterHistory { get; set; }
public double Value { get; set; }
public string Value_S { get; set; }
public DateTimeOffset CreatedAt { get; set; }
[Required]
public bool IsStable { get; set; }
public int? IDReference { get; set; }
public Reference Reference { get; set; }
[Required]
public int IDParameterTemplate { get; set; }
public ParameterTemplate ParameterTemplate { get; set; }
}
我在 ASP.NET 核心控制器中的代码:
[HttpGet]
public async Task<IActionResult> GetReferenceParameterHistory(int? IDparameterTemplate,
int? IDreference,
DateTimeOffset? startDate,
DateTimeOffset? endDate,
bool latestOnly)
{
try
{
IQueryable<ReferenceParameterHistory> query = _context.ReferenceParameterHistory.OrderByDescending(rph => rph.IDReferenceParameterHistory);
if (IDparameterTemplate != null && IDparameterTemplate > 0)
query = query.Where(rph => rph.IDParameterTemplate == IDparameterTemplate);
if (IDreference != null && IDreference > 0)
query = query.Where(rph => rph.IDReference == IDreference);
if (startDate != null)
query = query.Where(rph=> rph.CreatedAt >= startDate);
if (endDate != null)
query = query.Where(rph => rph.CreatedAt <= endDate);
if (latestOnly)
{
// I tried this but it doesnt compile and I don't have idea how to solve this ....
//query = (from rph in query
// group rph by rph.IDParameterTemplate
// into groups
// where groups.Max(rph => rph.CreatedAt)
// select groups.Key);
}
var referenceParameterHistory = await query.AsNoTracking().ToListAsync();
if (referenceParameterHistory.Any())
return new ObjectResult(referenceParameterHistory);
return new NotFoundResult();
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
return new StatusCodeResult(500);
}
}
我有一个基于该ReferenceParameterHistory
模型类的数据库表。我想按IDParameterTemplate
每个组从该表中提取的记录分组,我需要提取CreatedAt
列中具有最高值的记录(最新记录)。所以每个组都包含许多记录,但我只需要在列中获取最大值CreatedAt
。结果应该是IEnumerable
,ReferenceParameterHistory
因为我将该查询存储在一个IQueryable
变量中,然后将其发送到 SQL Server 以处理该查询。我的示例中的注释代码正是我尝试过的,但我不知道该怎么做。
我该如何解决这个问题?
解决方案
您在 lambda 中重用了变量 rph。
query = (从 rph 查询
组 rph 中的 rph.IDParameterTemplate 到 g
选择 g.OrderByDescending(t=>t.CreatedAt).FirstOrDefault());
推荐阅读
- scala - 可序列化类型的表达式不符合类型选项字符串 scala
- c++ - boost::get() 与 boost::apply_visitor 性能比较
- powerapps - 在 Powerapps 中合并图像文件并转换为 PDF
- google-apps-script - 从 Google App 脚本中的警报按钮关闭侧边栏
- php - 无法在 Mozilla 中使用输入类型密码
- sonarqube - SonarQube 6.7.x 使用声纳扫描仪 3.4 扫描 600k 行代码需要 31 小时。然而,使用声纳 qube 5.6.x 只需 30 分钟
- python-3.x - 对角减去python中的不同列
- python - AttributeError:'NoneType' 对象没有属性,因为相关对象 slug 不在视图中
- python - 在函数 Python 中使用刮掉的数字
- gradle - kaptKotin 目录未标记为 Generated Source Root b Idea Gradle 插件