You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中取ModifiedDate与xxxModified的最大日期赋值给Modified?

实现Modified属性返回两个日期的最大值

你的代码如下:

[Column, Nullable] public DateTime? ModifiedDate { get; set; }
[Association(QueryExpressionMethod = nameof(GetfffModified), CanBeNull = true)] 
public DateTime? xxxModified { get; set; } 
public static Expression<Func<Offer, IDataContext, IQueryable<DateTime?>>> GetfffModified()
{
    return (obj, db) => db.GetTable<OfferProducts>()
       .Where(rel => rel.OfferId == obj.OfferId)
       .OrderByDescending(i => i.ModifiedDate)
       .Select(x => x.ModifiedDate)
       .Take(1);
}

// here I am trying to set max date between ModifiedDate and xxxModified
public DateTime? Modified { get { return ModifiedDate; } set { ModifiedDate = value; } } 

完全可以实现让Modified属性返回ModifiedDate和xxxModified的最大值,分两种场景处理:

1. 内存中计算(实体已加载到内存)

直接修改Modified的getter逻辑,处理null值的情况,取两个日期的最大值:

public DateTime? Modified 
{ 
    get 
    {
        // 两个都为null时返回null,否则取非null值中的最大值
        var validDates = new List<DateTime?> { ModifiedDate, xxxModified }.Where(d => d.HasValue);
        return validDates.Any() ? validDates.Max() : null;
    } 
    set { ModifiedDate = value; } 
}

注意:如果xxxModified是延迟加载的,访问这个属性会触发数据库查询,若要避免性能问题,建议提前通过预加载操作加载相关的OfferProducts数据。

2. 支持数据库查询转换(用于LINQ查询中)

如果需要在数据库层面直接计算这个最大值(比如在Where、OrderBy等查询语句中使用Modified),直接在实体getter中写逻辑可能无法被ORM解析,这时候可以在查询时手动计算:

var query = db.GetTable<Offer>()
    .Select(o => new OfferViewModel
    {
        // 映射其他需要的属性
        ModifiedDate = o.ModifiedDate,
        xxxModified = o.xxxModified,
        // 直接在查询中计算两者的最大值
        Modified = new[] { o.ModifiedDate, o.xxxModified }.Max()
    });

你也可以修改关联查询的逻辑,把最大值计算整合到静态表达式方法中,但这种方式需要你的ORM支持自定义表达式的解析。

内容的提问来源于stack exchange,提问作者tesrer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:05:19