У меня есть метод FilterAsync для выполнения запроса с предложением where и включает свойства навигации. Ниже приведен метод для FilterAsync.
public async Task<IQueryable<T>> FilterAsync<T>(Expression<Func<T, bool>> predicate, params Expression<Func<T, object>>[] includes) where T : class
{
return await Task.Run(() =>
{
//Return first 250 records/objects from
var query = _context.Set<T>().Where(predicate).AsQueryable().Take(250);
return includes.Aggregate(query, (current, includeProperty)
=> current.Include(includeProperty).AsQueryable());
});
}
Мой фактический запрос, который вызывает метод filterasync для получения необходимых данных, приведен ниже. В нем содержатся условия для предложения where и навигационные свойства, которые включены.
model = await _repo.FilterAsync<SchoolContractServiceAreas>
(psa => psa.SchoolId == SchoolId &&
psa.SchoolContract.StartDate < DateTime.Now &&
psa.SchoolContract.EndDate > DateTime.Now,
pc=> pc.SchoolContract ,
p=> p.SchoolContract.School);
Теперь возникает вопрос: когда я вижу запрос, который преобразуется в SQL в SQL Profiler, он выполняет внутреннее соединение с SchoolContract и SchoolContractPartner. Но я хочу сделать Right join на p => p.SchoolContract.School. Как я могу добиться правильного объединения? Спасибо за помощь заранее.