2013-04-05 6 views
0

Я изучаю EF так извиняюсь, если на это ответили некоторые, где еще. Я не мог найти решение этого. Я использую два отслеживаемых запроса, потому что я не могу использовать Include, поскольку он не поддерживает условие. Так что мой код выглядит следующим образом:Entity Framework 4.1 Два отслеживаемых запроса

List<int> CategoryIDs = _categoryIDs.Split(',').Select(t => int.Parse(t)).ToList(); 

Мои модели:

public class Genre 
{ 

    public int GenreID { get; set; } 
    public string Name { get; set; } 
    public string iconURL{ get; set; } 
    public string Description { get; set; } 
    public int DisplaySequence { get; set; } 
    public IList<Category> Categories { get; set; 

} 



    public class Category 
    { 


    public int CategoryId { get; set; } 
    public int GenreID { get; set; } 
    public string CategoryName { get; set; } 
    public virtual Genre Genre { get; set; } 
    } 


    public class SubCategory 
     { 


    public int SubCategoryID { get; set; }  
    public int CategoryID { get; set; } 
    public string SubCategoryName { get; set; } 
    public virtual Category Category { get; set; } 
} 

Тогда у меня есть вид модели:

public class HomeIndexData 
{ 

    public IEnumerable<Genre> Genres { get; set; } 
    public IEnumerable<Category> Categories { get; set; } 
    public IEnumerable<SubCategory> SubCategories { get; set; }   

} 

Тогда я пытаюсь вернуть ViewModel в мой индекс:

 public ActionResult Index() 
    { 

    var genres = db.Genres.ToList().OrderBy(g => g.DisplaySequence); 
    var categories = db.Categories.Include(i => i.SubCategories) 
        .Where(i => CategoryIDs.Contains(i.CategoryId)); 
      foreach (var category in categories) 
      { 

      }; 

      HomeIndexData viewModel = new HomeIndexData 
      { 
       Genres = genres       

      }; 
      return View(viewModel);  

     } 

Он возвращает результат bu t Я хотел также фильтровать SubCategories. Как поставить условие WHERE вместо .Include (i => i.SubCategories).

Обратите внимание, что я не хочу возвращать анонимный тип, поэтому я - два отслеживаемых запроса.

Заранее спасибо.

+0

Если вы поделитесь своей моделью, вы получите гораздо больше внимания. Имеются ли категории и подкатегории одного типа? Другими словами, это эта справочная таблица? –

+0

Спасибо за ваш ответ. Я также поделился своими моделями. Любая мысль о том, как я могу поставить условие на подкатегории? – SAF

+0

Что вы ожидаете увидеть? – Robert

ответ

0

Да, я думаю, я знаю, что вы хотите сделать здесь:

// so filter out categories 
var categories = db.Categories.Where(c => CategoryIDs.Contains(c.CategoryID)); 

// so filter out subcategories - I'm not sure what kind of filtering you want on subcategories 
var subcategories = db.Subcategories.Where(s => CategoryIDs.Contains(s.SubCategoryID)); 
// so alternatively just do this: var subcategories = db.Subcategories.Where(s => s.DoYourFilteringForSubcategories); 

foreach (var subcategory in subcategories) 
    var cat = categories.SingleOrDefault(c => c.CategoryID == subcategory.CategoryID) 
    if (cat != null) 
    { 
     cat.Subcategories.Add(subcategory); 
    } 
    else 
    { 
     // very good question? what are you going to do with subcategories that 
     //match your criteria, but its category does not meet category filter 
    } 

в вашей модели вам нужно добавить:

public class Category 
    { 
    public int CategoryId { get; set; } 
    public int GenreID { get; set; } 
    public string CategoryName { get; set; } 
    public virtual Genre Genre { get; set; } 
    **public virutal List<Subcategory> Subcategories{ get; set; }** 
    } 

Итак вы в конечном итоге только с категориями, которые соответствуют вашим фильтр и содержит только подкатегории, соответствующие фильтру. Все строго типизированы и отслеживаются.

Смежные вопросы