public List<VehicleOnTaskDetailDto> GetVehicleOnTaskDetailFinished(VotFilterRequest filterRequest)
{
    using VehicleDeliveryContext context = new VehicleDeliveryContext();
    var result = (from v in context.VehiclesOnTask
        join d in context.Departments on v.DepartmentId equals d.Id 
        join dr in context.Drivers on v.DriverId equals dr.Id
        join vehicle in context.Vehicles on v.VehicleId equals vehicle.Id 
        where v.IsDeleted != true
        where v.IsFinished == true
        orderby v.GivenDate descending 
        select new VehicleOnTaskDetailDto{
            VehicleOnTaskId = v.Id,
            VehiclePlate = vehicle.Plate,
            VehicleId = v.VehicleId,
            DriverName = $"{dr.Name} {dr.Surname} - {dr.Mission}",
            DepartmentName = d.Name,
            TaskDefinition = v.TaskDefinition,
            AuthorizedPerson = v.AuthorizedPerson,
            Address = v.Address,
            GivenDate = v.GivenDate,
            ReturnDate = v.ReturnDate
        }).ToList();
    return result;
}

我想根据VotFilterRequest附带的DateType筛选器添加2行代码,如下所示:

if (filterRequest.DateType == "GivenDate")
{
    where filterRequest.FirstDate <= v.GivenDate
    where filterRequest.LastDate >= v.GivenDate
}
else
{
    where filterRequest.FirstDate <= v.ReturnDate
    where filterRequest.LastDate >= v.ReturnDate
}

我知道您不能这样做,但我也不想重复我的代码.有没有办法在短时间内做到这一点?谢谢你的问候.

注意:为了清楚起见,我想使用LINQ查询语法,而不是方法语法.

推荐答案

你可以使用混合方法,在使用记录集之前添加过滤器.对于simple where,使用方法语法更简单:

public List<VehicleOnTaskDetailDto> GetVehicleOnTaskDetailFinished(VotFilterRequest filterRequest)
{
    using var context = new VehicleDeliveryContext();

    var vehiclesOnTask = context.VehiclesOnTask.AsQueryable();

    if (filterRequest.DateType == "GivenDate")
    {
        vehiclesOnTask = vehiclesOnTask.Where(v => filterRequest.FirstDate <= v.GivenDate && filterRequest.LastDate >= v.GivenDate)
    }
    else
    {
        vehiclesOnTask = vehiclesOnTask.Where(v => filterRequest.FirstDate <= v.ReturnDate && filterRequest.LastDate >= v.ReturnDate)
    }   

    var result = (from v in vehiclesOnTask
        join d in context.Departments on v.DepartmentId equals d.Id 
        join dr in context.Drivers on v.DriverId equals dr.Id
        join vehicle in context.Vehicles on v.VehicleId equals vehicle.Id 
        where v.IsDeleted != true
        where v.IsFinished == true
        orderby v.GivenDate descending 
        select new VehicleOnTaskDetailDto{
            VehicleOnTaskId = v.Id,
            VehiclePlate = vehicle.Plate,
            VehicleId = v.VehicleId,
            DriverName = $"{dr.Name} {dr.Surname} - {dr.Mission}",
            DepartmentName = d.Name,
            TaskDefinition = v.TaskDefinition,
            AuthorizedPerson = v.AuthorizedPerson,
            Address = v.Address,
            GivenDate = v.GivenDate,
            ReturnDate = v.ReturnDate
        }).ToList();
    return result;
}

Csharp相关问答推荐

为什么在GuardationRule的收件箱函数中,decode.TryParse(valueString,out valueParsed)在给出1.0.1时返回true?

下拉图片点击MudBlazor

使用LayoutKind在C#中嵌套 struct .显式

如何修改中间件或其注册以正确使用作用域服务?

如果属性名为xyz,我需要使用System.Text.Json修改字符串类型的值""<>

如何删除文件的基础上嵌入的时间戳嵌入文件名

使用C#中的SDK在Microsoft Graph API上使用SubscribedSkus的问题

Azure Redis缓存与Entra ID身份验证

从依赖项容器在.NET 8中的Program.cs文件中添加IOC

在ASP.NET Core Web API项目中通过中间件修改`Request.Path`不会更改使用的控制器/操作

有空容错运算符的对立面吗?

在字符串C#之前获取数字

异步任务调用程序集

WinUI 3中DoubleCollection崩溃应用程序类型的依赖属性

如何从非异步任务中正确返回TypeResult

解决方案:延长ABP框架和ANGING OpenIddict中的令牌生命周期

如何保存具有多个重叠图片框的图片框?

如何对正方形格线进行对角分组

将两个JSON文件与覆盖值的主文件合并

默认架构不存在EF核心迁移