2013-11-25 3 views
0

У меня есть два класса, которые формируют много-много отношений.EF CodeFirst Linq Query Многие для многих

public class Product 
{ 
    public int ID { get; set; } 
    public virtual ICollection<Category> Categories{ get; set; } 
} 

public class Category 
{ 
    public int ID { get; set; } 
    public virtual ICollection<Product> Products{ get; set; } 
} 

Мне нужно выбрать все продукты, которые содержатся в определенной категории. Например, весь продукт в категории с идентификатором, равным 1, или все продукты в категориях с идентификаторами 1 и 3. Как написать этот запрос в Linq?

Примечание: Я хочу использовать это как технологию фильтрации. У меня есть этот код:

public IQueryable<Product> GVProducts_GetData(string Sort) 
     { 
      var query = _db.Products.AsQueryable(); 

      //Here I want filter my data 
      if (Sort == "1") 
      { 
       query = (here should select all the product which are in category 1) 
      } 
      else if (Sort == "2") 
      { 
       query = (here should select all the product which are in category 2) 
      } 
     return query; 

}

ответ

1

Создать метод:

public IEnumerable<Product> GetProducts(params int[] selectCategory) 
    {    
    return repository.Query<Category>  
    (p => selectCategory.Contains(p.ID)).SelectMany(p => p.Products).ToList() 

    } 

пример использования:

var product = GetProducts(1,3,5); 

где 1,3,5 искали категории

2
 DbContext.Category.Where(c => c.ID == 1) 
     .Include(c => c.Products).Select(x => x.Products).ToList(); 

Может быть что-то вроде этого. Обязательно используйте Include.

+0

пожалуйста, проверьте примечание – user3013083

+0

решение Iliya.Sulimanov выглядит отлично имо. – jHilscher

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