Добавить пункт Где в IQueryable - PullRequest
       1

Добавить пункт Где в IQueryable

0 голосов
/ 11 сентября 2018

У меня есть запрос:

public IQueryable GetOrder(int id)
{
  using (Context = new MyEntities())
  {
    IQueryable query = Context.Orders
     .Include("Customers")
     .Include("Products")
     .Include("OrderLines")
     .Where(o => o.OrderID == id);
    return query;
  }
}

Теперь я хочу извлечь базовый запрос (все без предложения .Where), чтобы я мог использовать его в других методах. Я попробовал это:

private IQueryable GetIncludes(MyEntities context)
{
  return context.Orders
   .Include("Customers")
   .Include("Products")
   .Include("OrderLines");
}

public IQueryable GetOldOrders()
{
  using (Context = new MyEntities())
  {
    DateTime ninetyDaysAgo = new DateTime(DateTime.Now.AddDays(-90));

    IQueryable query = GetIncludes(Context);
    query = query.Where(o => o.OrderDate < ninetyDaysAgo);
    return query;
  }
}

но компилятор говорит мне Cannot convert lambda expression to type 'string' because it is not a delegate type.

Я посмотрел на Невозможно преобразовать лямбда-выражение в тип 'string', потому что это не тип делегата и могу сообщить, что я использую System.LinqSystem.Linq.Dynamic) и System.Data.Entity. System.Data.Entity серым в VS.

Как создать IQueryable, к которому я могу добавить предложение .Where после его создания?

1 Ответ

0 голосов
/ 11 сентября 2018

Вы можете добавить тип объекта в IQueryable

private IQueryable<Order> GetIncludes(MyEntities context)
{
  return context.Orders
   .Include("Customers")
   .Include("Products")
   .Include("OrderLines");
}

затем обновите, где вы вызываете этот метод

IQueryable<Order> query = GetIncludes(Context);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...