C # Linq вложенный класс - где условие не работает - PullRequest
0 голосов
/ 21 апреля 2019

у меня 3 энты. Я нахожу категорию и присоединяюсь к категории ProductProduct, Product. это работает, но запрос "где p.IsActive == true" не работает. Я не хочу присоединяться к "p.IsActive == false" Что я могу сделать?

var categoryQueryable = from c in context.Categories
                     where c.SeoUrl == seoUrl
                     join cp in context.CategoryProducts.ToList() on c.CategoryId equals cp.CategoryId
                     join p in context.Products.ToList() on cp.ProductId equals p.ProductId                                         
                     where p.IsActive == true
                     select c;


Category category = new Category();
category = categoryQueryable.FirstOrDefault<Category>();

public class Category
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CategoryId { get; set; }
    public string SeoUrl { get; set; }

    public virtual List<CategoryProduct> CategoryProducts { get; set; }
}

public class CategoryProduct
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CategoryProductId { get; set; }
    public int CategoryId { get; set; }
    public int ProductId { get; set; }

    public virtual Category Category { get; set; }
    public virtual Product Product { get; set; }
}
 public classProduct
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public bool IsActive { get; set; }

    public virtual List<CategoryProduct> CategoryProducts { get; set; }
 }

1 Ответ

0 голосов
/ 21 апреля 2019

Спасибо за ответ. Результат теперь получают только активные продукты.

 var categoryQueryable = from c in context.Categories
                         where c.SeoUrl.Trim() == seoUrl.Trim()
                         join cp in context.CategoryProducts.ToList() on c.CategoryId equals cp.CategoryId
                         join p in context.Products.Where(p => p.IsActive == true).ToList() on cp.ProductId equals p.ProductId
                         select c;
...