Ich habe eine foreach-Schleife, die eine Liste von Objekten eines Typs liest und eine Liste von Objekten eines anderen Typs erstellt. Mir wurde gesagt, dass ein Lambda-Ausdruck das gleiche Ergebnis erzielen kann.
var origList = List<OrigType>(); // assume populated
var targetList = List<TargetType>();
foreach(OrigType a in origList) {
targetList.Add(new TargetType() {SomeValue = a.SomeValue});
}
Jede Hilfe wäre dankbar - ich bin neu bei Lambda und Linq, danke, s
Antworten:
Versuche Folgendes
Hierbei wird eine Kombination aus Lambdas und LINQ verwendet, um die Lösung zu erzielen. Die Select-Funktion ist eine Projektionsmethode, bei der der übergebene Delegat (oder in diesem Fall Lambda) auf jeden Wert in der ursprünglichen Sammlung angewendet wird. Das Ergebnis wird in einem neuen zurückgegeben
IEnumerable<TargetType>
. Der Aufruf von .ToList ist eine Erweiterungsmethode, die diesIEnumerable<TargetType>
in eine konvertiertList<TargetType>
.quelle
TargetType
? Am Ende hatte ich so etwas:List<ISearchEntity> results = myIQueryable.Select(x => (ISearchEntity) new TargetType { MyField = "Field value is " + x.TargetField }).ToList();
Wo das Ziel war, ein Objekt vom Typ zu bekommenList<ISearchEntity>
Wenn Sie wissen , Sie konvertieren möchten ,
List<T1>
umList<T2>
dannList<T>.ConvertAll
wird etwas effizienter alsSelect
/ToList
weil es die genaue Größe kennt , mit zu beginnen:Im allgemeineren Fall, wenn Sie nur die Quelle als kennen
IEnumerable<T>
, ist die Verwendung vonSelect
/ToList
der richtige Weg. Man könnte auch argumentieren, dass es in einer Welt mit LINQ zunächst idiomatischer ist ... aber es lohnt sich zumindest, sich derConvertAll
Option bewusst zu sein .quelle
IEnumerable<T>
dann haben, rufen Sie einfach anSelect
undToList
laut Jareds Antwort.x => buildTargetType(x)
quelle
cannot cast expression
Ausnahmequelle
Ich glaube, so etwas sollte funktionieren:
quelle
.ToList()
am Ende ein hinzufügen , andernfalls wird einfach eine IEnumerable bereitgestellt.Hier ist ein einfaches Beispiel.
quelle
quelle
Angenommen, Sie haben mehrere Eigenschaften, die Sie konvertieren möchten.
quelle
Oder mit einem
constructor
&linq
mitSelect
:Die
Linq
Linie ist weicher! ;-);quelle
Wenn Sie eine Funktion zum Wirken verwenden müssen:
Wo meine benutzerdefinierte Funktion ist:
quelle
für ähnliche Typklasse.
List<targetlist> targetlst= JsonConvert.DeserializeObject<List<targetlist>>(JsonConvert.SerializeObject(<List<baselist>));
quelle
Wenn die Typen direkt gegossen werden können, ist dies der sauberste Weg, dies zu tun:
Wenn die Typen nicht direkt umgewandelt werden können, können Sie die Eigenschaften vom ursprünglichen Typ dem Zieltyp zuordnen.
quelle
Wir werden den ersten Listentyp als String betrachten und ihn in den Integer-Listentyp konvertieren wollen.
Fügen Sie Werte in die ursprüngliche Liste ein.
Zielliste vom Integer-Typ erstellen
Listenwerte mit forEach drucken:
quelle