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