Предложение объединения C # с ассоциативной таблицей

#c# #linq #join

#c# #linq #Присоединиться

Вопрос:

У меня есть 3 класса: (Персонал, хирургия и эксплуатация)

     public class Personnel
{
    [Key]
    public int CodePersonel { get; set; }
    public FullName NomComplet { get; set; }
    public Adresse Adress { get; set; }
    public int Age { get; set; }

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

}
  

Chirurgien

 public class Chirurgien : Personnel
{
    public int Nbre_anne_Exp { get; set; }
    public int NoteXP { get; set; }
}
  

и операция:

     public class Operation
{
    public int OperationId { get; set; }
    public DateTime DateDebut { get; set; }
    public DateTime DateFin { get; set; }
    public int Duree { get; set; }
    public bool Etat { get; set; }

    public string CIN { get; set; }

    public ICollection<Personnel> Personel { get; set; }

    public Patient Patients { get; set; }

    public override string ToString()
    {
        return CIN;
    }
}
  

И я также создал ассоциативную таблицу «Membre»

 HasMany(p => p.Personel).WithMany(v => v.Operation).Map(m => {
            m.ToTable("Membre");
                m.MapLeftKey("Operation");
                m.MapRightKey("Personel");
            });
  

Как я могу получить список операций, которые завершились неудачной операцией (Operation Etat = false)??

Я использовал этот код, чтобы вернуть полный список операций:

 public ICollection<Chirurgien> NoobDoctors()
    {
        var req = from t in ut.getRepository<Chirurgien>().GetAll()

                  select t;


        return req.ToList();
    }
  

Спасибо

Комментарии:

1. Запрос Linq избыточен, поскольку в нем нет условий — просто используйте return ut.getRepository<Chirurgien>().GetAll().ToList(); .

Ответ №1:

Как я могу получить список операций, которые завершились неудачной операцией (Operation Etat = false)??

Вы можете использовать Operation свойство навигации с Any для фильтрации:

 var result = from c in ut.getRepository<Chirurgien>().GetAll()
             where c.Operation.Any(o => !o.Etat)
             select c;
  

Поскольку вы настроили many-to-many связь с неявной таблицей соединений, EF будет поддерживать таблицу (включая объединения запросов) для вас.

Комментарии:

1. Привет: Теперь у меня есть это исключение, в этой строке было обработано исключение с аргументом null :

2. где c.Операция. Любой (o => !o.Etat), у меня есть несколько неудачных операций (Etat = false) в моей базе данных

3. Хм, это недостаток всех этих шаблонов репозиториев — нельзя увидеть фактический код. Итак, что это GetAll() ? Я предполагал, IQueryable<T> что в этом случае вы не сможете получить NRE. Возвращается ли оно IEnumerable<T> ? Затем измените тип или используйте другой метод, который возвращает IQueryable (соответствующий DbSet )