필자의 기능이 구성 요소로 분할되는 것을보고 싶습니다. 초기 쿼리 (조인, 투영 등), 변이, 그리고 당신이 필요로하는 구체적인 결과를 반환합니다. 예 :
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