Я запутался в своем запросе 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
элементов.