Вы можете условно добавить к своему запросу, но вы должны понимать, что после того, как ваш запрос напечатан, вы не можете изменить его тип на что-то другое.Ваша проблема заключается в том, что один из ваших запросов относится к анонимному типу, а другой - к сущности, и это противоречиво.
Пример работающего см. В
var query = context.Foos.AsQueryable();
if (DateTime.Now.Second % 2 == 0)
{
query = query.Join(context.Bars, f => f.BarId, b => b.Id, (f, b) => new { f, b }).Select(item => item.f);
}
else
{
query = query.OrderByDescending(f => f.Id);
}
Причина, по которой это работает, заключается в том, что первоначальное объявление IQueryable<Foo>
, а каждый из результирующих запросов (либо объединенная, либо упорядоченная версия) по-прежнему IQueryable<Foo>
.
Если вам необходимо спроецировать результат запросак анонимному типу, я рекомендую сохранить это для более позднего шага (запрос вашего составного запроса).Создайте все свои объединения, свою фильтрацию, свои заказы и т. Д., А затем, наконец, удалите свой анонимный тип.Пока ваш тип одинаков, независимо от другой логики, которую вы включаете, вы сможете использовать свой единственный запрос.
Однако, если логика влияет на форму данных, которые вы на самом деле получаете, тогда вам не повезло, вам нужно будет пойти в другом направлении.