首页 > 解决方案 > 将 Expression<> 合并到 LINQ 查询中

问题描述

我正在尝试Expression在 LINQ 查询中加入一个。

Expression<Func<RailcarTrip, DateTime?>>? getDateProperty = Search.GetDateProperty();
if (getDateProperty != null)
{
    if (Search.StartDate.HasValue)
        query = query.Where(rt => getDateProperty(rt) >= Search.StartDate);
    if (Search.EndDate.HasValue)
        query = query.Where(rt => getDateProperty(rt) <= Search.EndDate);
}

public Expression<Func<RailcarTrip, DateTime?>>? GetDateProperty()
{
    return DateType switch
    {
        TripDateType.Waybill => rt => rt.WaybillRailcar.Waybill.CreateDate,
        TripDateType.Delivery => rt => rt.DeliveryDate,
        TripDateType.Release => rt => rt.ReleaseDate,
        TripDateType.Return => rt => rt.ReturnDate,
        TripDateType.ReturnRelease => rt => rt.ReturnReleaseDate,
        _ => null,
    };
}

但这不会编译。getDateProperty()不支持在我的 LINQ 查询中使用。

谁能告诉我如何使这项工作?

我在网上找到了通过Expression<>直接传递而不是在表达式中使用它来解决此问题的示例。但就我而言,我将结果与其他内容进行比较。

我想我可以将日期传递给GetDateProperty()并将其合并到那里的表达式中。但是对于每种比较类型,我需要不同版本的方法。

标签: c#.net-coreroslyn.net-5

解决方案


推荐阅读