Вы можете попробовать:
public InfoAppointment GetByBoatName(string name) // this name is more semantically correct
{
return Dbset.FirstOrDefault(c => c.Boat != null && c.Boat.Name == name);
}
И вам не нужно использовать Where
до FirstOrDefault
- последний также может принимать предикаты, поэтому вы можете изменить метод GetByCode
(или простоиспользуйте FirstOrDefault
в методе Search
).
Редактировать:
Для случая, когда у лодки несколько назначений.Я предлагаю вам действительно следующее определение:
public class Boat : Entity
{
public Guid BoatId { get; set; }
public virtual List<InfoAppointment> InfoAppointments { get; set; }
}
Чтобы вернуть все встречи для выбранной лодки:
public List<InfoAppointment> GetAllByBoatName(string name)
{
return Boats.First(c => c.Name == name).InfoAppointments.ToList();
}
Чтобы вернуть одну встречу для выбранной лодки:
public InfoAppointment GetOneByBoatName(string name,
Expression<Func<TEntity, bool>> predicate)
{
return Boats.First(c => c.Name == name).InfoAppointments.FirstOrDefault(predicate);
}