通过多个导航属性查询

时间:2018-09-01 16:53:58

标签: c# asp.net linq asp.net-core entity-framework-core

我对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的事件列表。换句话说,我只想显示用户喜欢该类别的事件。

更多澄清

我能够从另一个函数中按类别过滤事件,该函数从视图中获取硬编码的类别ID,并且效果很好:

  //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表中保存的categoryID,而不是通过表单传递硬编码的ID查询。没有多少个UserCategory项目。

0 个答案:

没有答案