我有一个MVC项目,我正在使用实体框架。
我在数据库中有一些数据需要使用复选框按整数变量(时间)进行过滤。我收到一条错误消息:
参数字典包含方法'System.Web.Mvc.ViewResult索引(System.String,System.String,System.String [])的非可空类型'System.Int32'的参数'time'的空条目,Int32)'在'LazyRecipe.DAL.RecipesController'中。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数
如何过滤数据?
// GET: Recipes
public ViewResult Index(string sortOrder, string searchString, string[] FilteredsearchString, int time)
{
IQueryable recipes;
if (String.IsNullOrEmpty(searchString))
{
recipes = db.Recipes.Include("Ingredients");
}
else
{
FilteredsearchString = searchString.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries);
// "string" can be lowercase.
Console.WriteLine(string.Join(",", FilteredsearchString));
// ... "String" can be uppercase.
Console.WriteLine(String.Join(",", FilteredsearchString));
recipes = db.Recipes.Where(r => r.Ingredients.Any(i => FilteredsearchString.Contains(i.IngredientName)));
}
switch(time)
{
case 30:
recipes = db.Recipes.Where(c => c.Time.CompareTo(time) <= 30);
break;
case 60:
recipes = db.Recipes.Where(c => c.Time.CompareTo(time) <= 60);
break;
case 61:
recipes = db.Recipes.Where(c => c.Time.CompareTo(time) >= 61);
break;
default:
recipes = db.Recipes;
break;
}
return View(recipes);
}
答案 0 :(得分:0)
case 30:
recipes = db.Recipes.Where(c => c.Time.CompareTo(time) <= 30);
break;
我认为您在此处的意思是简单地将c.Time
与常量30
进行比较。因此,您只需执行.Where(c => c.Time <= 30)
或.Where(c => c.Time <= time)
,因为time
与您要比较的值具有相同的值。
请注意,您不应该始终在db.Recipes
处开始查询。通过执行recipes = db.Recipes.Where(…)
,您将覆盖之前已为recipes
设置的任何查询。例如,代码中第一个.Include("Ingredients")
的{{1}}将被覆盖。
相反,只需继续调用if
上的查询方法来继续对其进行修饰:
recipes
对于您的recipes = recipes.Where(c => c.Time <= 30);
语句,由于您在每个常量情况下将时间与switch
的值进行比较,因此您不需要将其写入三次。您只需检查time
是time
,30
还是60
,然后与61
进行比较。
总的来说,您的方法可能如下所示:
time
请注意,您应该修改public ViewResult Index(string sortOrder, string searchString, string[] FilteredsearchString, int time)
{
IQueryable recipes = db.Recipes.Include("Ingredients");
if (!string.IsNullOrEmpty(searchString))
{
recipes = recipes.Where(r => r.Ingredients.Contains(searchString));
}
if (time == 30 || time == 60 || time == 61)
{
recipes = recieps.Where(c => c.Time <= time);
}
return View(recipes);
}
逻辑。通过拆分searchString
,您传递了然后填充的searchString
和FilteredsearchString
数组,这对我来说真的没有意义吗?你可能意味着searchString
在这里是一个局部变量?