Linq-Konvertierung Von ICollection<T> Liste<T>
Ich bin mit Entity Framework Code First.
Ich bin mit dem folgenden einfachen Klassen:
public class Users
{
public ICollection<Projects> Projects{get;set;}
}
public class Projects
{
public ICollection<Users> Users{get;set;}
}
Ich bin das verwenden von linq für die Datenabfrage. Bei der Ausführung der folgenden Abfrage: (Beachten Sie, dass lstProjects
ist ein List<Project>
)
var lstUsers = (from users in lstProjects
where users.ProjectId == pId
select users.Users).ToList();
Ich habe eine List<Users>
Objekt und möchten, füllen Sie diese Liste mit items. Wie,
var lstUsersToDisplay = new List<Users>();
lstUsersToDisplay = (List<Users>)lstUsers; //This can't be cast.
Was ist der Ansatz zu konvertieren ICollection<T>
zu List<T>
?
Zweitens habe ich List<Users>
und wollen es zu konvertieren in ICollection<Users>
wie erreichen?
Bearbeitet:
Szenario deutlicher ist, dass
Alle Projects
geladen lstProjects
und wir müssen wählen Sie die Users
die abgebildet wurden, um ein bestimmtes Projekt. Diese Benutzer sind ebenfalls enthalten Projects
als Sammlung. Jeder Project
hat seine Users collection
wie, wenn ich es zerlegt die lstProjects wie es sein würde:
lstProjects --> [0]-->//other Properties
ICollection[Users]-->[0]//Contains User class Properties
[1]....
[1] ... same procedure
Hoffe, es klärt das Szenario
lstProjects
? Wenn es ein List<Project>
dann haben Sie tatsächlich bekam eine List<Project>
als lstUsers
trotz Ihrer Namen. Wenn Sie den Mauszeiger über die var
von var lstUsers
in Visual Studio, was bedeutet es Ihnen zeigen? Und was ist die Fehlermeldung? Es würde wirklich helfen, wenn Sie hatte eine kurze, aber vollständige Programm demonstriert das problem. (Auch, warum Sie erstellen eine leere Liste und dann ignorieren Sie es? Warum bist du nicht einfach mit var lstUsersToDisplay = lstUsers;
?)mein entschuldigt bei der Eingabe grundsätzlich bin ich beim abrufen des users-Auflistung aus dem Projekt Liste. ich habe es geändert
So Ihr
users
range-variable ist eigentlich eine Project
? Heilige verwirrende Namensgebung, Batman! Es klingt wie Sie haben jetzt eine List<ICollection<Users>>
. Wieder, sollten Sie den Mauszeiger über die var
um zu sehen, was Sie tatsächlich bekommen habe...
InformationsquelleAutor Hassaan | 2014-07-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihre Abfrage ist wirklich:
dann ist das äquivalent zu:
Werden, wenn Sie versuchen, um die Liste der Anwendungen von einem single Projekt, ich würde schreiben, dass:
Wenn es mehrere Projekte mit dem gleichen
ProjectId
Sie möchten, glätten Sie die Benutzer. Zum Beispiel:Oder in query expression syntax:
Beachten Sie die Tatsache, dass meine range-Variablen aufgerufen wird
project
, denn es handelt sich um ein Projekt, nicht einen Benutzer. Die Benennung ist wichtig - Aufmerksamkeit zu schenken. Ich würde auch umbenennen, dieProjects
undUsers
Arten nurProject
undUser
, vorausgesetzt, jeder ist wirklich nur repräsentieren sollen eine Einheit.nett - aber warum nutzen Sie nicht die überlastung zu
.Sinlge
- Filter, die auch in Ihrem 3. snippet? Es sieht schöner aus und ist besser lesbar IMHO?Doh, ja. Beheben wird.
Ja, guter plan. Getan.
InformationsquelleAutor Jon Skeet
Den generischen Weg ist
ToList
:Aber es sieht aus wie Sie wirklich haben eine
List<ICollection<Users>>
. Zu "glätten", die die Liste verwendenSelectMany
:Einen
List<Users>
ist bereits eineICollection<Users>
- keine Konvertierung erforderlich ist.überprüfen Sie meine update - Sie brauchen, um klar sein, was
lstUsers
wirklich ist.bitte überprüfen Sie die bearbeitete Teil, wenn es clearify.
InformationsquelleAutor D Stanley
lstUsers
ist nicht einList<User>
. Es ist einList<ICollection<User>>
. Ordnen Sie jedem Projekt eine Sequenz der Benutzer, nicht auf einen einzelnen Benutzer. Zu glätten, eine Sammlung von Sammlungen in nur einer Sammlung der inneren Elemente, die Sie verwenden würdenSelectMany
oder im Abfrage-syntax, würden Sie schreiben Ihre Abfrage in etwa so:Jetzt Sie haben eine
List<User>
fürlstUsers
. Sie können zuweisen, so ist eineList<User>
oder eineICollection<User>
InformationsquelleAutor Servy
InformationsquelleAutor prampe