从一个对象的多个属性中获取最大值的C#或Linq函数



我使用的是实体框架。我想从具有多个关联的IQueryable中获取ID,并且每个关联的IQueryable都有最后更新的时间戳。我只想在所有上次更新的时间戳的最大值(DateTime-不可为null(大于给定日期时获得ID。在Oracle中,我会使用GREATEST函数。

我有一个解决方案,但正在寻找更优雅的解决方案。我尝试了将SelectManyWhere函数结合使用,但我认为它不适用于这种情况。这是我的解决方案:

public IQueryable<int> GetAllContractIdsWithChanges(MyDb context, DateTime lastTimeChecked)
{
return context.Contracts.Where(c => c.GetGreatestLastUpdateTs() >= lastTimeChecked).Select(c=>c.ContractId);
}
public static DateTime GetGreatestLastUpdateTs(this Contract c)
{
return new DateTime[]
{
c.LST_UPDT_TS,
c.ContractSection1.Max(a => a.LST_UPDT_TS),
c.ContractSection2.Max(a => a.LST_UPDT_TS),
c.ContractSection3.Max(a => a.LST_UPDT_TS),
c.ContractSection4.Max(a => a.LST_UPDT_TS),
c.ContractSection5.Max(a => a.LST_UPDT_TS)
}.Max();
}

我想知道C#/Linq是否有内置的东西可以自然地做到这一点。-谢谢

在Oracle中,我会使用GREATEST函数。

我建议您创建一个存储过程来完成繁重的工作,而不是将其与Linq/EF拼接在一起;因为可以用EF调用存储过程。

参见

SQL Server是否支持GREATST和LEAST,如果不支持,常见的解决方法是什么?

使用实体框架执行存储过程

相关内容

  • 没有找到相关文章

最新更新