2014-12-02 25 views
0

我下面的http://www.asp.net/mvc/overview/getting-started/introduction/getting-started使用了相同的屬性,在MVC .NET過濾數據

本教程中的ASP.NET MVC 5教程多個複選框創建包含電影目標基本數據庫,該數據庫的屬性名稱,發行日期,流派和價格。

我有兩個複選框,一個電影誰的價格是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; } 
} 

控制器:

public class MoviesController : Controller 
{ 
    private MovieDBContext db = new MovieDBContext(); 



    public ActionResult Index(bool movieCost5 = false, bool movieCost10 = false) 
    { 

     var movies = from m in db.Movies 
        select m; 



     if (movieCost5 == true && movieCost10 == false) 
     { 
      movies = movies.Where(x => x.Price == 5); 
     } 
     else if (movieCost5 == true && movieCost10 == true) 
     { 
      movies = movies.Where(x => x.Price == 5 && x.Price == 10); 
     } 

     else if (movieCost5 == false && movieCost10 == true) 
     { 
      movies = movies.Where(x => x.Price == 10); 
     } 

     return View(movies); 
    } 
} 
+0

除了下面的答案,你也應該投你'movies'變量作爲' IQueryable '可以延遲執行數據庫調用,直到您評估過濾器。現在,代碼是說:「獲取數據庫中的所有影片並將其存儲在內存中」,然後「從匹配標準X的內存中對象獲取每部影片」。這在小數據集上不會顯而易見,但隨着它們變大,您會注意到您的代碼正在拖動。 – 2014-12-02 16:37:33

+0

謝謝,我會放棄它。 – User00000034 2014-12-05 12:15:47

回答

3
x.Price == 5 && x.Price == 10 

這意味着你正在尋找與在同一時間的價格均爲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" } }; 
} 
+0

謝謝,在對兩個或三個屬性進行排序時工作。有沒有更好的方法來做到這一點,比如說,我是否在分揀衆多房產?即使我缺乏經驗,我也不禁想到有更好的辦法。 – User00000034 2014-12-05 12:15:24

+0

使用Linq to SQL進行多種排序的一種方法是對可查詢對象進行默認排序,即使它只是數據庫ID:'movies = db.Movies.OrderBy(x => x.Id).AsQueryable( )'。然後,您可以以類似於價格的方式爲其添加更多排序,而不是在'.ThenBy()'上添加'.Where()'。現在,這些應用程序的順序是重要的,所以如果您希望用戶按照所選順序進行排序,它會變得更加複雜。這將需要比評論允許的更多空間。 – 2014-12-05 17:32:27