C# 对同一属性使用多个复选框来过滤MVC.NET中的数据

C# 对同一属性使用多个复选框来过滤MVC.NET中的数据,c#,asp.net-mvc,checkbox,C#,Asp.net Mvc,Checkbox,我正在学习ASP.NETMVC5教程 本教程创建一个包含电影对象的基本数据库,其属性为标题、发布日期、类型和价格 我有两个复选框,一个是5美元,一个是10美元 如果只选中了其中一个复选框,那么我所拥有的一切都很好,但是如果同时选中了这两个复选框(我试图列出价格为5的电影和价格为10的电影),那么视图中就不会显示任何内容 我走远了吗 型号: public class Movie { public int ID { get; set; } public string Title

我正在学习ASP.NETMVC5教程

本教程创建一个包含电影对象的基本数据库,其属性为标题、发布日期、类型和价格

我有两个复选框,一个是5美元,一个是10美元

如果只选中了其中一个复选框,那么我所拥有的一切都很好,但是如果同时选中了这两个复选框(我试图列出价格为5的电影和价格为10的电影),那么视图中就不会显示任何内容

我走远了吗

型号:

 public class Movie
 {
    public int ID { get; set; }
    public string Title { get; set; }
    public DateTime ReleaseDate { get; set; }
    public string Genre { get; set; }
    public decimal Price { get; set; }

 }

public class MovieDBContext : DbContext
{
    public DbSet<Movie> Movies { get; set; }
}
这意味着你要同时寻找价格为5和10的电影——除非你有一些自定义逻辑将
price
与整数进行比较,否则这是行不通的

您可能正在寻找:

x.Price == 5 || x.Price == 10
(逻辑或非逻辑AND)

编辑:

在处理类似问题时,尝试缩小您的问题范围通常很有用,这是您可以自己做的事情。如果您认为复选框逻辑的工作方式存在问题,为什么不在更简单的情况下测试它,例如:

if (movieCost5 == true && movieCost10 == false)
{
   movies = new[] { new Movie { Title = "movieCost5 works correctly" } };
}
else if (movieCost5 == true && movieCost10 == true)
{
   movies = new[] { new Movie { Title = "YAY! Both work as well!" } };
}
else if (movieCost5 == false && movieCost10 == true)
{
   movies = new[] { new Movie { Title = "movieCost10 works correctly" } };
}
这意味着你要同时寻找价格为5和10的电影——除非你有一些自定义逻辑将
price
与整数进行比较,否则这是行不通的

您可能正在寻找:

x.Price == 5 || x.Price == 10
(逻辑或非逻辑AND)

编辑:

在处理类似问题时,尝试缩小您的问题范围通常很有用,这是您可以自己做的事情。如果您认为复选框逻辑的工作方式存在问题,为什么不在更简单的情况下测试它,例如:

if (movieCost5 == true && movieCost10 == false)
{
   movies = new[] { new Movie { Title = "movieCost5 works correctly" } };
}
else if (movieCost5 == true && movieCost10 == true)
{
   movies = new[] { new Movie { Title = "YAY! Both work as well!" } };
}
else if (movieCost5 == false && movieCost10 == true)
{
   movies = new[] { new Movie { Title = "movieCost10 works correctly" } };
}
这意味着你要同时寻找价格为5和10的电影——除非你有一些自定义逻辑将
price
与整数进行比较,否则这是行不通的

您可能正在寻找:

x.Price == 5 || x.Price == 10
(逻辑或非逻辑AND)

编辑:

在处理类似问题时,尝试缩小您的问题范围通常很有用,这是您可以自己做的事情。如果您认为复选框逻辑的工作方式存在问题,为什么不在更简单的情况下测试它,例如:

if (movieCost5 == true && movieCost10 == false)
{
   movies = new[] { new Movie { Title = "movieCost5 works correctly" } };
}
else if (movieCost5 == true && movieCost10 == true)
{
   movies = new[] { new Movie { Title = "YAY! Both work as well!" } };
}
else if (movieCost5 == false && movieCost10 == true)
{
   movies = new[] { new Movie { Title = "movieCost10 works correctly" } };
}
这意味着你要同时寻找价格为5和10的电影——除非你有一些自定义逻辑将
price
与整数进行比较,否则这是行不通的

您可能正在寻找:

x.Price == 5 || x.Price == 10
(逻辑或非逻辑AND)

编辑:

在处理类似问题时,尝试缩小您的问题范围通常很有用,这是您可以自己做的事情。如果您认为复选框逻辑的工作方式存在问题,为什么不在更简单的情况下测试它,例如:

if (movieCost5 == true && movieCost10 == false)
{
   movies = new[] { new Movie { Title = "movieCost5 works correctly" } };
}
else if (movieCost5 == true && movieCost10 == true)
{
   movies = new[] { new Movie { Title = "YAY! Both work as well!" } };
}
else if (movieCost5 == false && movieCost10 == true)
{
   movies = new[] { new Movie { Title = "movieCost10 works correctly" } };
}

除了下面的答案之外,您还应该将
movies
变量转换为
IQueryable
,以延迟数据库调用的执行,直到您评估了过滤器。现在的代码是“获取数据库中的每一部电影并将其存储在内存中”,然后是“从内存中符合条件X的对象获取每一部电影”。这在较小的数据集上不会很明显,但当它们变大时,您会注意到您的代码被拖拽。谢谢,我将试一试。除了下面的答案之外,您还应该将
movies
变量转换为
IQueryable
,以延迟数据库调用的执行,直到您评估了过滤器。现在的代码是“获取数据库中的每一部电影并将其存储在内存中”,然后是“从内存中符合条件X的对象获取每一部电影”。这在较小的数据集上不会很明显,但当它们变大时,您会注意到您的代码被拖拽。谢谢,我将试一试。除了下面的答案之外,您还应该将
movies
变量转换为
IQueryable
,以延迟数据库调用的执行,直到您评估了过滤器。现在的代码是“获取数据库中的每一部电影并将其存储在内存中”,然后是“从内存中符合条件X的对象获取每一部电影”。这在较小的数据集上不会很明显,但当它们变大时,您会注意到您的代码被拖拽。谢谢,我将试一试。除了下面的答案之外,您还应该将
movies
变量转换为
IQueryable
,以延迟数据库调用的执行,直到您评估了过滤器。现在的代码是“获取数据库中的每一部电影并将其存储在内存中”,然后是“从内存中符合条件X的对象获取每一部电影”。这在较小的数据集上不会很明显,但当它们变大时,您会注意到您的代码被拖拽。谢谢,我会尝试一下。谢谢,在对两个或三个属性进行排序时可以使用。有没有更好的方法来做到这一点,比如说,如果我对许多属性进行排序?即使我缺乏经验,我也忍不住认为还有更好的方法。使用Linq to SQL进行多种排序的一种方法是对可查询对象进行默认排序,即使它只是数据库ID:
movies=db.movies.OrderBy(x=>x.ID).AsQueryable()
。然后,您可以以类似于价格的方式向其添加更多排序,但不必使用
。Where()
您可以添加
。ThenBy()
。现在,这些应用的顺序很重要,所以如果你想让用户按照他们选择的顺序应用排序,它会变得更复杂一些。这将比这里的评论占用更多的空间。谢谢,在对两个或三个属性进行排序时有效。有没有更好的方法来做到这一点,比如说,如果我对许多属性进行排序?即使我缺乏经验,我也忍不住认为还有更好的方法。使用Linq to SQL进行多种排序的一种方法是对可查询对象进行默认排序,即使它只是数据库ID:
movies=db.movies.OrderBy(x=>x.ID).AsQueryable()
。那你呢