Как реализовать левое соединение в лямбда-выражении linq с помощью include - PullRequest
0 голосов
/ 12 марта 2019

У меня есть метод 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. Как я могу добиться правильного объединения? Спасибо за помощь заранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...