2016-12-09 2 views
0

Я новичок в C# и Entity Framework Core. Я много искал для этого вопроса, но не нашел ответа. У меня есть следующие три моделей (я упростил ее):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.

Большое спасибо за вашу помощь

ответ

2

Изменить это:

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

к этому:

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

В принципе, «Получить упражнения, где любые упражнения клинические картины на осуществление содержит данный идентификатор упражнения ». В ваших моделях ExerciseClinicalPicture - это коллекция. Вы должны снова в нее впасть. Ваша ошибка заключается в том, что свойство не существует, потому что это коллекция.

И вот как вы его запросите. Тогда вы можете просто сделать все, как обычно.

+0

Большое спасибо. Можете ли вы также рассказать мне запрос, когда я хочу отфильтровать имя в ClinicalPicture? –

+0

_context.Exercise.Where (e => e.ExerciseClinicalPicture.Any (ec => ec.ClinicalPicture.ClinicalPictureName == "Name")) –

+0

Большое спасибо за вашу помощь. –

Смежные вопросы