#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
)