Как запросы Платформы Объекта могут быть снова использованы (использование методов)?

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

Кажется, что при вызове любого метода в запросе, Вы заканчиваете с:

LINQ к Объектам не распознает метод {X} метод, и этот метод не может быть переведен в выражение хранилища

Что я хотел бы сделать, идеально использование:

var q = from item in context.Items
        where item.SomeCondition == true
        select new {Item = item, Connections = GetConnections(item)};

GetConnections метод, который выполняет запросы на item. Я пытаюсь снова использовать (довольно сложный) запрос в GetConnections, но я не уверен, как заставить это работать.

Текущая подпись GetConnections - что-то как:

IQuerable<Connection> GetConnections(MyItem item)
7
задан Sander Rijken 10 July 2010 в 22:13
поделиться

2 ответа

Expression<Func<Customer, CustomerWithRecentOrders>>
  GetCustomerWithRecentOrdersSelector()
{
  return c => new CustomerWithRecentOrders()
  {
    Customer = c,
    RecentOrders = c.Orders.Where(o => o.IsRecent)
  };
}

Потом позже ...

var selector = GetCustomerWithRecentOrderSelector();
var q = myContext.Customers
  .Where(c => c.SomeCondition)
  .Select(selector);
11
ответ дан 7 December 2019 в 01:15
поделиться

Ваш запрос выглядит для меня почти идеальным. Вы, конечно, можете вызвать GetConnections(item) из запроса; вызов методов является законным. Однако у вас есть другая проблема: Члены анонимного типа должны быть созданы с именами членов (без этих имен у вас не будет возможности получить к ним доступ).

Следующий запрос компилируется нормально:

var q = from item in context.Items
        where item.SomeCondition == true
        select new {item = item, connections = GetConnections(item)};

Обратите внимание на добавление item = и connections = к select.

Обратите внимание, однако, что ваш метод GetConnections(), возможно, должен быть static (мой был; я не был уверен, случайно ли вы оставили это без внимания или нет).

-1
ответ дан 7 December 2019 в 01:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: