次の構造のリストが2つあります。 <の各名はリストです。私はそれらの2つのリストを1つのList<Server>
にまとめたいと思います。以下の擬似コードは、そのような2つのリストを表示し、どのように結果は次のようになります。C#LINQを使用してネストされたリストを持つ2つのリストを結合する
<Servers> <Servers>
+... +...
+-- Server A,1 +-- Server A,1
| +... | +...
| +--<Maps> | +--<Maps>
| +--Map x | +--Map x
| +... | +...
| +--<Times> | +--<Times>
| +--Time i | +--Time l
| +--Time j | +--<Jumps>
| +--<Jumps> | +--Jump t
| +--Jump s | +--Jump u
| +--Map y | +--Map z
| +... | +...
| +--<Times> | +--<Jumps>
| +-- Time k | +--Jump v
+-- Server B,1 +-- Server B,2
結果は次のようになります。
<Servers>
+...
+-- Server A,1
| +...
| +--<Maps>
| +-- Map x
| +...
| +--<Times>
| +--Time i
| +--Time j
| +--Time l
| +--<Jumps>
| +--Jump s
| +--Jump t
| +--Jump u
| +-- Map y
| +...
| +--<Times>
| +--Time k
| +-- Map z
| +...
| +--<Jumps>
| +--Jump v
+-- Server B,1
+-- Server B,2
私は完全外部を使用してみましたLINQと結合したが、結果はどのような私にもありませんでしたなぜなら、私は、同じキーを持っていたサーバーがマッチしていなかったことを理解していなかったからです。だから私はいつも同じデータを持つ同じサーバーの複製を持っていました。それは私がlinqでそれをやろうとするのをやめ、リストを手動でマージするためにループを使用したときです。
以下のコードは私に望ましい結果リストを与えます。今のところ私はもっと良い方法を見つけるまでそれを使用します。 linqでそれをやっている簡単な/簡単な方法はありますか?ラムダ式を使う?
foreach (Server importServer in oImportList)
{
if (!CoreList.Contains(importServer))
{
CoreList.Add(importServer);
continue;
}
Server coreServer = CoreList.FirstOrDefault(o => o.Equals(importServer));
coreServer.Name = importServer.Name;
coreServer.KZTimerVersion = importServer.KZTimerVersion;
foreach(Map importMap in importServer.Maps)
{
if (!coreServer.Maps.Contains(importMap))
{
coreServer.Maps.Add(importMap);
continue;
}
Map coreMap = coreServer.Maps.FirstOrDefault(o => o.Equals(importMap));
coreMap.Jumps.Concat(importMap.Jumps);
coreMap.Times.Concat(importMap.Times);
}
}
あなたは正しい考えを持っていると思います。ネストされた 'Join'sが間違ったパラメータを渡したようです。例えば、 'Maps'ジョインでは、' coreServer.Maps'と 'oImportList'に参加しようとしています...これは' coreServer.Maps'と 'importServer.Maps'であると思われます。 – 31eee384
私はあなたの助けを借りてコードを手に入れることができましたが、結果は私が望むリストではないことがわかりました。それは両方のリストに存在する要素だけを含んでいました。 – schm0ftie
ああ、申し訳ありません...私は非常にまれに '結合'を使用したので、私は混乱してしまいました。私はあなたのために働くかもしれない 'GroupBy'と' Select'を使って答えを元に戻しました。前に削除したのは、私が間違っていると思ったからです。 – 31eee384