c#中如何使用switch case语句根据条件过滤结果集

问题描述 投票:0回答:1

我正在执行一项任务,我在请求中发送状态作为参数,并希望根据该状态和数据库表中的另一列进行过滤,但该列不是从请求传递的。

所以就像

当状态不完整且数据库中的键值为空时,则获取满足此条件的记录(等待)

当状态不完整且数据库中的键值不为空时,则获取满足此条件的记录 (待审核)

当状态暂停时,获取满足此条件的记录 (拒绝)

当状态为成功时,则获取满足此条件的记录 (已批准)

当状态为“失败”时,则获取满足此条件的记录 (失败)

public class StatusRequest
{
    public Status Status { get; set; }
}

public Task<StatusSearchResponse> Handle(StatusRequest request)
{
var projects = Repository.GetProjects(request.Status);
switch (request.Status)
{
    case Status.Incomplete && projects .Any(x => x.Key == null):
        projects.Where(x => x.Status == Status.Incomplete && x.Key == null);
        break;
    case Status.Suspended:
        break;
    case Status.Succeeded:
        break;
    case Status.Failed:
        break;
    default:
        throw new ArgumentOutOfRangeException();
}

var response = new StatusSearchResponse();
response.Projects = projects;
return SystemTask.FromResult(response);
}

所以我的代码如下 或者没有 switch 语句我可以使用存储过程来这样做,有人可以建议吗

c# asp.net asp.net-core conditional-statements switch-statement
1个回答
0
投票

projects.Where(...)
不会对“项目”“做”任何事情,但它返回一个新列表(可枚举)。

所以将该行更改为

projects = projects.Where(x => x.Status == Status.Incomplete && x.Key == null).ToList();
  • 您可能需要一个 .ToList() 从 IEnumerable 进行转换,
    .Where()
    返回到列表(我假设“项目”是)
  • 并且(重要!)将该列表分配回“项目”
© www.soinside.com 2019 - 2024. All rights reserved.