あなたの機能が構成要素に分割されているとは思いますが最初のクエリ(結合、投影など)、突然変異、そして必要な特定の結果を返します。例えば、
var query = from r in result
join oUS in onOrderUS on r.ItemGUID equals oUS.ItemGUID into jOnOrderUS
from oUS in jOnOrderUS.DefaultIfEmpty()
let OnOrderUS = oUS != null ? oUS.UnitQty : 0
select new { r, OnOrderUS };
foreach (var item in query)
{
item.r.OnOrderUS = item.OnOrderUS;
}
return query.Select(item => item.r);
// assumes this is in a method returning IEnumerable<R>
foreachをコードしたくない場合は、次のように書くことができます。私は、クエリからの変異を好きではないが、これは私があまりにも読みやすさを支援するために、より論理的な部分に、クエリの分割を見たい
Func<R, int, R> mutateR = (r, onOrderUS) => { r.OnOrderUS = onOrderUS; return r; };
var query = from r in result
join oUS in onOrderUS on r.ItemGUID equals oUS.ItemGUID into jOnOrderUS
from oUS in jOnOrderUS.DefaultIfEmpty()
let OnOrderUS = oUS != null ? oUS.UnitQty : 0
select mutateR(r, OnOrderUS);
これは少し効果が少ないですか? foreachはデータを完全にループします。選択内のFuncは、データが選択されたときにこれを実行します。 – EtienneT
@EtienneT、私はちょうど突然変異を見るのが好きではない。しかし、私はあなたがforeachなしで望むことをする編集を提供しました。 –
これはFuncを宣言してクエリをインライン化して呼び出すのとほぼ同じことです。ご回答有難うございます! – EtienneT