У меня проблема с фильтрацией записей, возвращаемых с помощью linq. Объекты, участвующие выглядеть следующим образом:Фильтрация дочернего объекта с несколькими критериями
Назначение
public partial class Appointment
{
public Appointment()
{
Callbacks = new HashSet<Callback>();
}
[Key()]
public int AppointmentId { get; set; }
public DateTime Start { get; set; }
public DateTime? Deleted { get; set;}
public virtual ICollection<Callback> Callbacks { get; set; }
}
Ответный
public partial class Callback
{
[Key()]
public int CallbackId { get; set; }
public DateTime? Deleted { get; set; }
public virtual Appointment Appointment { get; set; }
public virtual User AssignedTo { get; set; }
}
Пользователь
public partial class User
{
public User()
{
Callbacks = new HashSet<Callback>();
}
[Key()]
public int UserId { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string Ref { get; set; }
public virtual ICollection<Callback> Callbacks { get; set; }
}
Я пытаюсь вернуться записи, которые удовлетворяют следующим критериям:
- Дата назначения
start
должна равнятьсяsearchDate
- Назначение не удаляется
- Дата назначения
start
не должны конфликтовать с любыми назначениями, что пользователь уже имеет
Я попытался с помощью следующего запроса, но результаты не возвращаются (есть назначения, доступные для даты 01/03/2016
(dd/mm/yyyy
).
public List<AppointmentSearchResultsViewModel> SearchByDate(DateTime searchDate, string userName)
{
return _context.Appointments
.Where(a =>
a.Start.Date == searchDate
&& a.Deleted == null
&& a.Callbacks.Any(c =>
!(c.Appointment.Start != a.Start
&& c.AssignedTo.Ref == userName
&& c.Deleted == null)
))
.OrderBy(a => a.Start)
.Select(a)
.ToList();
}
Помогла ли мне помощь в том, как правильно фильтровать, исходя из критериев выше?
Редактировать
Чтобы попытаться уточнить модель:
- Пользователь имеет обратные вызовы
- обратного вызова имеет назначение
Цель этот запрос предназначен для поиска всех назначений на searchDate
, где пользователь еще не имеет обратного вызова, запланированного на время встречи.
Ваша модель и ваш код не совпадает. Так что непонятно, что вы просите. Вы пытаетесь отфильтровать обратные вызовы или встречи? Как этот компилятор Linq компилируется? –
Вы говорите: «Дата начала встречи должна быть равна searchDate», а затем вы говорите: «Дата начала назначения не должна конфликтовать с любыми встречами, которые у пользователя уже есть». Как так ? –
@CetinBasoz Значит, что 'searchdate' еще не добавлено ни одному пользователю. – HimBromBeere