我有一些冗余的 linq 查询我想分解出一段代码。这些是 IQueryable 的连接 experssions,重要的是我不会使查询在没有重构的情况下被更早地评估。
这是一个简化的查询:
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),所以我不确定如何使它工作。
谢谢