實體框架核心包括過濾器

asp.net-core c# 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);

此查詢引發錯誤,因為我無法在ExerciseClinicalPicture的集合上調用ClinicalPictureId

希望我的問題好像這樣。這是我第一次在Stackoverflow上提問。

非常感謝你的幫助

一般承認的答案

改變這個:

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

對此:

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

基本上,“鍛煉時,鍛煉中的任何運動臨床圖片都包含給定的鍛煉ID。”在您的模型中,ExerciseClinicalPicture是一個集合。你必須再次深入研究它。您的錯誤是該屬性不存在,因為它是一個集合。

這就是你如何查詢它。然後你就可以像往常那樣做你的包括。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因