Konvertieren Liste von Objekten in die Liste der Tupel ohne Durchlaufen
Ich versuche, mich zu fügen Sie einen zusätzlichen parameter, um eine Liste von ef zu verfolgende Objekte verarbeiten, aber ich laufen in Kenntnis zu initialisieren jedes Listenelement explizit. Was ist die richtige linq Weg, dies zu tun? Abgesehen von lakonischen, gibt es einen Vorteil, eine linq-syntax in diesem Fall?
List<app_subjects> subjectList = AppMySQLQueries.GetAllSubjects();
List<Tuple<app_subjects, bool>> subjectCollection = new List<Tuple<app_subjects, bool>>(subjectList.Count);
foreach (app_subjects subject in subjectList)
{
subjectCollection.Add(Tuple.Create(subject, false));
}
Suchte ich die Seite, ohne Erfolg.
LINQ
können dies tun, aber es sieht sehr ähnlich wie eine traditionellefor
oderforeach
.- LINQ würde auch der iteration, (intern)
- Der Unterschied ist, dass mit LINQ können Sie in der Lage sein zu verschieben die Ausführung der arbeiten.
- stimmt aber nicht, wenn er ruft Liste, die angesichts der Beispielcode notwendig werden könnte.
- Daher das "kann" in meiner Aussage.
- ja, ich gab einige Erklärung für die verzögerte Ausführung in meiner Antwort.
- Liste<Tupel<T1, T2>> ernsthaft? Wie wäre Dictionary<T1, T2>?
- Sie haben oft keine Kontrolle über welche Art von Sammlungen, die Sie in eine ausgereifte code-Basis.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wollen Sie nur zu verwenden, eine Projektion hier (
Select
), die für die transformation in Ihrer lambda-Ausdruck auf jedes element in der quellauflistung.Den
ToList()
Aufruf ist nicht völlig notwendig, wenn Sie entfernt es anschließend die Methode zurückIEnumerable<Tuple<app_subjects, bool>>
. Wenn Sie einfach nur mal zum Durchlaufen der Auflistung von Tupeln danach dieToList
nennen sollte entfernt werden, da es Kräfte in der Ausführung (zählt dieIEnumberable
) und dann deine nächste operation (foreach) würde das gleiche tun, macht den code schlechter.app_subject
war eine Eigenschaft der Objekte in dersubjectList
Sammlung. Da es eigentlich nur eineList<app_subject
es solltex
stattx.subject
.ToList
es zählt 0 mal. Und wenn Sie anrufenToList
dann listet es einmal so, dass es tatsächlich funktioniert schlechter-in einem Fall-und das gleiche in die andere...ist<app_subjects> subjectList = AppMySQLQueries.GetAllSubjects();
aber die eigentliche Abfrage nicht ausführen von LINQ to Entities, es ist LINQ to Objects. Wenn Sie versuchen, es in diesem Zusammenhang, es funktioniert nicht, weil die LINQ-Anbieter übersetzt Ihre Abfrage in eine SQL-Abfrage und gibt es keine Tupel in SQL.So?
versuchen.