1
다음과 같은 개체 그래프가 표시됩니다.LINQ (컬렉션 내의 컬렉션)로 코드 단순화
A --> B[] --> B1[]
--> B2[]
--> C[]
난의 부재/속성에 대한 특정 조건을 확인해야 B1 및 B2뿐만 아니라 b2.Code C는 [] 내의 어딘가에 나타날 것을 보장한다. 모든 조건이 충족되면 C 및 B 배열 요소의 변수를 사용하여 새 객체를 생성해야합니다. 내 현재 시도는 아래에 표시되어 있지만이 LINQ 더 간결하게 만들 수 있을지 궁금해?
A a = GetA();
List<MyTest> tsts = new List<MyTest>();
foreach (B b in a.B)
{
foreach (B1 b1 in b.B1)
{
if (b1.State == ("READY"))
{
foreach (B2 b2 in b.B2)
{
var tst = (from c in a.C
where c.Code == b2.Code && !c.IsRedundant
select new MyTest
{
Code = c.Code,
BVal = b.BVal,
C1Val = c.C1
}).FirstOrDefault();
if (tst != null)
tsts.Add(tst);
break;
}
}
}
}
감사합니다. 정말 유망 해 보입니다. 나는 이상한 점에 관해서는 코드를 게시하는 것이 조금 성급한 것이지만, 메모를 처리하기 위해; - 우리는 실제로 b1에서 아무것도 가져 가지 않습니다. 그러나 b1.State가 "READY"가 아니면 목록에 추가하고 싶지 않습니다. - FirstOrDefault와 break는 오직 0 또는 1과 일치하는 x가 있어야하므로 사용됩니다. 코드 == b2.Code. 따라서 일치하는 항목이 있으면이를 사용합니다. 그렇지 않으면 ** 가장 바깥 쪽 루프 (즉, b)에서 다음 항목을 처리해야합니다. 일반적으로 b1 배열에는 최대 2 개의 요소가 있으므로 휴식을 취하지 않았습니다. –