Запрос через несколько свойств навигации - PullRequest
0 голосов
/ 01 сентября 2018

Я запутался в своем запросе LINQ, и мне стало интересно, есть ли способ добиться следующего:

У пользователя есть список понравившихся категорий:

 public class ApplicationUser : IdentityUser
    {
        [PersonalData]
        public string Name { get; set; }
        [PersonalData]
        [DataType(DataType.Date)]
        public DateTime DOB { get; set; }
        [PersonalData]
        public PersonGender Gender { get; set; }
        [PersonalData]
        [ForeignKey("Suburb")]
        public int SuburbId { get; set; }

        //Information about user preferences
        public ICollection<UserCategory> LikedCategories { get; set; }
        public virtual  Suburb Suburb { get; set; }
    }

Где UserCategory определяется следующим образом:

public class UserCategory
{
    [Key]
    public int Id { get; set; }

    public ApplicationUser applicationUser { get; set; }
    public Category Category { get; set; }

    [ForeignKey("ApplicationUser")]
    public string applicationUserId { get; set; }
    [ForeignKey("Category")]
    public int CategoryId { get; set; }
}

А Category составляет:

    public class Category
    {
        [Key]
        public int ID { get; set; }
        public string Name { get; set; }
        public int CategoryFollowers { get; set; }

        public ICollection<EventCategory> EventCategories { get; set; }
        public ICollection<UserCategory> UserCategories { get; set; }
    }
}

Наконец, в моем классе Events у меня есть следующее:

 public class Event
    {
        [Key]
        public int ID { get; set; }
        [Required]
        public string Name { get; set; }
        [Display(Name = "Is Featured?")]
        public bool isFeatured { get; set; }


        public byte[] EventImage1 { get; set; }
        public byte[] EventImage2 { get; set; }

        public virtual ICollection<EventCategory> EventCategories { get; set; }
        public virtual ICollection<UserEvent> UserEvents { get; set; }

Моему представлению требуется объект типа Event, поэтому я пытаюсь вернуть список событий, в котором EventCategory содержится в таблице UserCategory. Другими словами, я просто хочу показать события, для которых пользователю понравилась категория.

БОЛЬШЕ УТОЧНЕНИЯ

Я могу отфильтровать свои события по категориям из другой функции, которая использует жестко закодированный идентификатор категории из представления, и это прекрасно работает:

  //GET:// Browse event by category
        public async Task<IActionResult> BrowseByCategory(int? id, int? alt_id)
        {
            if (id == null)
            {
                return NotFound();
            }
            var eventsContext = _context.Events
                    .Include(m => m.Venue)
                        .ThenInclude(mf => mf.Suburb)
                            .ThenInclude(mc => mc.Constituency)
                                .ThenInclude(md => md.City)
                    .Where(e => e.EventCategories.Any(c => c.Category.ID == id || c.Category.ID == alt_id))
                    .Take(15)
                    .OrderByDescending(o => o.StartDate);

                return View("Browse",await eventsContext.ToListAsync());
        }

Я хотел бы сделать то же самое, что и выше, но вместо того, чтобы передавать в виде жестко запрошенных запросов идентификаторов из формы, я хочу, чтобы запрос проверял идентификаторы категорий, сохраненные в таблице UserCategory. Не установлено количество UserCategory элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...