Для начала он не может выполнить код против этого в вашей БД.
Вот мои предложения о том, как это сделать
var peopleIds= people.Select(x=>x.Id);
Session.Query<VacationRequestDate>()
.Where(r => peopleIds.Contains(r.VacationRequest.PeopleId)).ToList()
.Where(x=>people.Contains(r.VacationRequest,new
PersonComparer()).Select(r=>r.VacationRequest).ToList()
Если вы считаете, что это не то, что вы хотите, то я бы посоветовал вам попробовать свои силы в запросах Criteria или HQL ивы можете получить именно то, что вы хотите от БД.
Вы также можете использовать свой компаратор следующим образом.Мне нравится делать мой родовым.Вы также можете сделать это для сравнения строк, и здесь вы добавите свою логику игнорирования регистра и т. Д.
public class ComparerByIntId<T> : IEqualityComparer<T>
where T : class, IIntegerIdentifiable
{
public bool Equals(T x, T y)
{
if (x == null && y == null)
return true;
if (x == null || y == null)
return false;
return x.Id == y.Id;
}
public int GetHashCode(T obj)
{
return base.GetHashCode();
}
}
Теперь, когда вы выполните свой запрос, он будет выглядеть следующим образом:
Session.Query<VacationRequestDate>()
.Where(r => people
.Contains(r.VacationRequest.Person, new ComparerByIntId<Person>()))
.Select(r=>r.VacationRequest)
.ToList();
Hopeэто помогает