рефакторинг выражения LINQ IQueryable для удаления дублированных частей запросов

У меня есть несколько запросов linq с избыточностью, которые я хотел бы выделить из одного куска кода. Это совместные эксперименты, которые являются IQueryable, и важно, чтобы запрос не оценивался раньше, чем без рефакторинга.

Вот упрощенный запрос:

var result = 
from T in db.Transactions
join O in db.Orders on T.OrderID equals O.OrderID
join OD in db.OrderDetails on O.OrderID equals OD.OrderID into OrderDetails
let FirstProductBought = OrderDetails.First().Select(OD => OD.Product.ProductName)
select new
{
  TransactionID = T.TransactionID,
  OrderID = O.OrderID,
  FirstProductBought = FirstProductBought
};

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

Как правило, для повторного использования кода и IQueryables я смог сделать код, который принимает входящий IQueryable и выдает IQueryable /IOrderedQueryable в качестве вывода. С помощью таких функций я могу создавать выражения LINQ с помощью повторно используемого кода, который все еще откладывает запрос до тех пор, пока запрос не будет полностью построен. Здесь, поскольку у меня есть только int (orderID), я не уверен, как заставить его работать.

спасибо

7 голосов | спросил Frank Schwieterman 20 PMpMon, 20 Apr 2009 21:47:10 +040047Monday 2009, 21:47:10

0 ответов


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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132