kullanarak birleştirin. C# içinde aşağıdaki yapının iki listesi var. <> 'daki her isim bir listedir. Bu iki listeye bir List<Server>
'a katılmak istiyorum. Aşağıdaki sözde kod iki tür listeleri görüntüler ve sonuç gibi görünmelidir nasıl:C# İç içe geçmiş listeleri olan iki listeyi LINQ
<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
Sonucu olmalıdır: Ben tam dış kullanarak çalıştı
<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 ile katılmak ama sonuç ne de değildi Aynı anahtarlara sahip olan sunucuların birbirleriyle eşleşmediğini anlamadığım için, aynı sunucudan her zaman farklı verilerle çoğaltılmıştım. O zaman bunu linq ile yapmaya çalışmayı bıraktım ve listeleri el ile birleştirmek için sadece döngüler kullandım.
Aşağıdaki kod bana istenen sonuç listesini verir. Şimdilik bunu yapmak için daha iyi bir yol bulana kadar kullanacağım. Bunu linq ile basit/kısa bir yol var mı? Lambda ifadelerini kullanarak?
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);
}
}
Doğru fikre sahip olduğunuzu düşünüyorum. İç içe geçmiş 'Join's yanlış parametreleri geçtiniz gibi görünüyor! Örneğin, "Maps" birleşiminde 'coreServer.Maps' ve' oImportList''e katılmaya çalışıyorsunuzdur… Bunun “coreServer.Maps” ve “importServer.Maps” olması gerektiğinden şüpheleniyorum. – 31eee384
Yardımınızla çalışan kodu alabildim, ancak sonucun istediğim liste olmadığını gördüm. Sadece her iki listede de bulunan öğeleri içeriyordu. – schm0ftie
Ah, pardon ... Ben sadece çok nadiren 'Join' kullandım, bu yüzden karıştırdım. Sizin için çalışabilecek 'GroupBy' ve' Select' kullanarak bir yanıtı geri aldım. Daha önce sildim çünkü yanlış yolda gittiğimi düşündüm. – 31eee384