WebApi Controller IQueryable包含很少的回报。如何解决"并非所有代码路径都返回一个值"?

时间:2014-04-15 05:21:37

标签: c# asp.net asp.net-web-api

这是IQueryable的web api控制器必须返回不同的查询结果,但是调试器说“并非所有代码路径都返回一个值”。

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);
            }
        }

3 个答案:

答案 0 :(得分:1)

you can put default case 

default: Return null;

答案 1 :(得分:1)

我猜在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);


            }
        }

注意:如果有超过2个案例(到达和内部),您应该针对所有情况修改此代码,并在最后添加默认案例。

答案 2 :(得分:0)

如果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);
                }
            }