实体框架核心包括过滤器

时间:2016-12-09 16:08:04

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

我是C#和Entity Framework Core的新手。我已经搜索了很多这个问题,但没有找到答案。我有以下三个模型(我简化了它):

public class Exercise
{
    public int ExerciseId { get; set; }

    [Required]
    public string ExerciseName { get; set; }

    public string Filename { get; set; }

    public ICollection<ExerciseClinicalPicture> ExerciseClinicalPicture { get; set; }
}

public class ClinicalPicture
{
    [Key]
    public int ClinicalPictureId { get; set; }

    [Required]
    [Display(Name = "Krankheitsbild")]
    public string ClinicalPictureName { get; set; }

    public ICollection<ExerciseClinicalPicture> ExerciseClinicalPicture { get; set; }
}

public class ExerciseClinicalPicture
{
    [Key]
    public int ExerciseClinicalPictureId { get; set; }

    public int ExerciseId { get; set; }

    public Exercise Exercise { get; set; }

    public int ClinicalPictureId { get; set; }

    public ClinicalPicture ClinicalPicture { get; set; }
}

现在我想要一个查询,其中结果是与某个临床图片相关联的所有练习的集合,并且包含clinicalPicture

这样的事情:

int id = 1;
exercises = _context.Exercise.Where(e => e.ExerciseClinicalPicture.ClinicalPictureId == id)
.Include(m => m.ExerciseClinicalPicture)
.ThenInclude(m => m.ClinicalPicture);

此查询引发错误,因为我无法在ClinicalPictureId的集合上调用ExerciseClinicalPicture

希望我的问题可以这样。这是我第一次在Stackoverflow上提问。

非常感谢你的帮助

1 个答案:

答案 0 :(得分:2)

改变这个:

exercises = _context.Exercise.Where(e => e.ExerciseClinicalPicture.ClinicalPictureId == id)

到此:

exercises = _context.Exercise.Where(e => e.ExerciseClinicalPicture.Any(ec => ec.ExerciseId == id))

基本上,&#34;进行锻炼,其中锻炼的任何运动临床图片都包含给定的锻炼ID。&#34; 在您的模型中,ExerciseClinicalPicture是一个集合。你必须再次深入研究它。您的错误是该属性不存在,因为它是一个集合。

这就是您查询它的方式。然后你就可以像往常那样做你的包括。