冗長性を持つ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)しか持っていないので、それを動作させる方法がわかりません。
おかげ
これはLinq'ersにとって非常に高いレベルの質問です。私は同じ基本的なことを尋ね、多くのフィードバックを得ていない。 – Merritt