从Linq获取Max Date

时间:2014-01-27 21:40:22

标签: linq

我写了以下查询

var vehicleQuery = VehicleRepository.Where(o => o.IsActive && o.IsVisible);

var tempdate = vehicleQuery
    .Select(x => x.Images
        .Where(y => y.IsActive && y.IsVisible)
        .Max(u => u.CreationDate)
    );

我是如何从Images实体获得Max CreationDate的?

2 个答案:

答案 0 :(得分:1)

您可以使用SelectMany;

var tempdate = vehicleQuery
    .SelectMany(x => x.Images
                      .Where(i => i.IsActive && i.IsVisible)
                      .Select(i => i.CreationDate))
    .Max();

修改

  

错误得到:=“转换为值类型'System.DateTime'失败,因为   具体化值为null。结果类型的通用   参数或查询必须使用可空类型。“

也许CreationDate是可以为空的类型,你必须检查:

var tempdate = vehicleQuery
    .SelectMany(x => x.Images
                      .Where(i => i.IsActive && i.IsVisible && i.CreationDate.HasValue)
                      .Select(i => i.CreationDate))
    .Max();

答案 1 :(得分:0)

如果您要查找单个最大日期,则需要使用SelectMany将车辆图像展平为一个序列:

vehicleQuery.SelectMany(v => v.Images).Where(img => img.IsActive && img.IsVisible).Max(img => img.CreationDate);