1
次のようなオブジェクトグラフが表示されます。LINQ(コレクション内のコレクション)でコードを簡略化する
A --> B[] --> B1[]
--> B2[]
--> C[]
I、メンバー/ 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は、一致するxが0または1になるように使用してください。コード== b2.Code。したがって、一致するものがあればそれを使用します。それ以外の場合は、最外ループの次のアイテム(つまり、b)の処理を**本当に**続けるべきです。通常、b1配列には最大で2つの要素があるので、私は中断することはありませんでした。 –