这是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);
}
}
答案 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);
}
}