WebApi控制器IQueryable包含少量返回.如何解决“;并不是所有的代码路径都返回一个值“;

本文关键字:返回 路径 代码 一个 并不是 包含少 何解决 解决 控制器 WebApi IQueryable | 更新日期: 2023-09-27 17:58:32

这是IQuerybale的webapi控制器,它必须返回不同的查询结果,但调试器表示"并非所有代码路径都返回值"。

public IQueryable<xTourist> GetxTouristByCategory(string category)
        {
            var now = System.DateTime.MinValue;
            switch (category)
            {
                case "arrival":
                    now = System.DateTime.Now.AddDays(-3);
                    return db.xTourist.AsQueryable().Where(p => p.Room == null).Where(p => p.Arrival >= now).OrderByDescending(p => p.Arrival);
                case "inhouse":
                    now = System.DateTime.Today;
                    return db.xTourist.AsQueryable().Where(p => p.Room != null).Where(p => p.Arrival >= now).OrderByDescending(p => p.Arrival);
            }
        }

WebApi控制器IQueryable包含少量返回.如何解决“;并不是所有的代码路径都返回一个值“;

you can put default case   
default: Return null;

我想switch语句中缺少默认值,这就是为什么它显示所有代码路径都应该返回一个值。

在switch语句中添加一个默认事例,如果只有两个事例,则像这样在其中使用return语句。

public IQueryable<xTourist> GetxTouristByCategory(string category)
        {
            var now = System.DateTime.MinValue;
            switch (category)
            {
                case "arrival":
                    now = System.DateTime.Now.AddDays(-3);
                    return db.xTourist.AsQueryable().Where(p => p.Room == null).Where(p => p.Arrival >= now).OrderByDescending(p => p.Arrival);
                default:
                    now = System.DateTime.Today;
                    return db.xTourist.AsQueryable().Where(p => p.Room != null).Where(p => p.Arrival >= now).OrderByDescending(p => p.Arrival);

            }
        }

注意:如果有两个以上的案例(到达和内部),您应该为所有案例修改此代码,并在最后添加一个默认案例。

如果category不是arrival也不是inhouse,函数会返回什么?

这就是编译器抱怨not all code paths return a value的原因。

作为一个额外的提示,你可以将你的代码重新考虑为这样的东西:

    enum ECategory { Arrival, Inhouse };
    public IQueryable<xTourist> GetxTouristByCategory(ECategory category)
            {
                return (category = ECategory.Arrival) ?
                       db.xTourist.AsQueryable().Where(p => p.Room == null).Where(p => p.Arrival >= System.DateTime.Now.AddDays(-3)).OrderByDescending(p => p.Arrival)
                     : db.xTourist.AsQueryable().Where(p => p.Room != null).Where(p => p.Arrival >= System.DateTime.Today).OrderByDescending(p => p.Arrival);
                }
            }