Повторное использование результата запроса EF JOIN (лямбда) для создания другого запроса - PullRequest
0 голосов
/ 25 июня 2019

Мне было интересно, возможно ли использовать результат запроса соединения Entity Framework.

Пожалуйста, игнорируйте, имеет ли смысл запрос на присоединение или нет. Я просто пытаюсь объяснить свою проблему, а не иметь правильный запрос. Я немного упростил это для ясности:

var firstJoinQuery = (from company in this.TimesheetsContext.companies
                      join country in this.TimesheetsContext.Countries
                      on company.CountryId equals country.Id
                      where (country == 'USA')
                      select new { CountryId = country.Id }).Distinct();

var secondJoinQuery = (from country in this.TimesheetsContext.Countries
                      join firstJoinQuery
                      on country.CountryId equals firstJoinQuery.CountryId
                      select new { Country = country }).Distinct();

Клянусь, я уже делал это раньше, но я просто не могу получить результат одного объединения, которое будет использоваться во втором или третьем.

Причина, по которой я хочу это сделать, состоит в том, чтобы упростить чтение, поскольку это не всегда очевидно при использовании EF и сложных запросов.

Мой текущий обходной путь направлен на фактическую хранимую процедуру, так как ее, безусловно, будет легче читать, но, если возможно, я хотел бы сначала попробовать ее в EF.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 25 июня 2019

Я думаю, что вы можете сделать это, но вам нужно использовать .ToList() в ваших запросах, потому что Distinct() выполнение, как отложено. Здесь вы пытаетесь соединить запрос как строку запроса, а не результат запроса.

var firstJoinQuery = (from company in this.TimesheetsContext.companies
                      join country in this.TimesheetsContext.Countries
                      on company.CountryId equals country.Id
                      where (country == 'USA')
                      select new { CountryId = country.Id }).Distinct().ToList;

var secondJoinQuery = (from country in this.TimesheetsContext.Countries
                      join firstJoinQuery
                      on country.CountryId equals firstJoinQuery.CountryId
                      select new { Country = country }).Distinct().ToList();
   var thirdJoinQuery .....
0 голосов
/ 25 июня 2019

Я в конце концов понял это, исследуя это еще немного.

Я нашел следующую статью: Объединение запросов LINQ (или, когда вызывать ToList) , что помогло.

Чтобы решить мою проблему, мне пришлось скорее вернуть полный объектчем просто свойство, удалите .Distinct () и .ToList (), поэтому я изменил это:

var firstJoinQuery = (from company in this.TimesheetsContext.companies
                  join country in this.TimesheetsContext.Countries
                  on company.CountryId equals country.Id
                  where (country == 'USA')
                  select new { CountryId = country.Id }).Distinct().ToList;

на

var firstJoinQuery = (from company in this.TimesheetsContext.companies
                  join country in this.TimesheetsContext.Countries
                  on company.CountryId equals country.Id
                  where (country == 'USA')
                  select company;

Я не закончил играть с этимТакже я не закончил свой запрос в полномасштабную ссылку, но если найду больше, я обновлю этот ответ.

Надеюсь, это поможет.

0 голосов
/ 25 июня 2019

Вы можете объединить два запроса с Союз .

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