Linq Conversion De ICollection<T> Liste<T>
Je suis en utilisant Entity Framework Code First.
Je suis en utilisant le simple suivant catégories:
public class Users
{
public ICollection<Projects> Projects{get;set;}
}
public class Projects
{
public ICollection<Users> Users{get;set;}
}
Je suis à l'aide de linq pour l'extraction des données. Lors de l'exécution de la requête suivante: (à Noter que lstProjects
est un List<Project>
)
var lstUsers = (from users in lstProjects
where users.ProjectId == pId
select users.Users).ToList();
J'ai un List<Users>
objet et souhaitez remplir cette Liste avec des éléments. Comme,
var lstUsersToDisplay = new List<Users>();
lstUsersToDisplay = (List<Users>)lstUsers; //This can't be cast.
Quelle est la démarche pour convertir ICollection<T>
à List<T>
?
Autre part, j'ai List<Users>
et que vous voulez convertir en ICollection<Users>
comment réaliser ceci?
Édité:
Le scénario, plus clairement, c'est que
Tous les Projects
sont chargés dans lstProjects
et nous avons besoin de sélectionner le Users
qui ont été assignés à un projet spécifique. Ces Utilisateurs sont aussi sont contenues à l'intérieur de Projects
de collecte. Chaque Project
a son Users collection
comme si j'ai décomposé le lstProjects ce serait comme:
lstProjects --> [0]-->//other Properties
ICollection[Users]-->[0]//Contains User class Properties
[1]....
[1] ... same procedure
Espère que ça efface le scénario
- Qu'est-ce que
lstProjects
? Si c'est unList<Project>
, alors vous avez réellement obtenu unList<Project>
commelstUsers
, en dépit de vos noms. Si vous passez la souris sur lavar
devar lstUsers
dans Visual Studio, que faut-il vous montrer? Et quel est le message d'erreur? Il serait vraiment utile si vous voulez montrer une courte mais complète du programme montrant le problème. (Aussi, pourquoi êtes-vous en train de créer une liste vide et ensuite l'ignorer? Pourquoi n'utilisez vous pasvar lstUsersToDisplay = lstUsers;
?) - mon m'excuse auprès de la frappe, fondamentalement, je suis en récupérant les utilisateurs de la collecte à partir de la liste des projets. j'ai modifié
- Si votre
users
gamme variable est en fait unProject
? Saint confusion de dénomination, de Batman! Il semble que vous avez maintenant obtenu uneList<ICollection<Users>>
. Encore une fois, vous devriez passez la souris sur lavar
voir ce que vous avez réellement obtenu...
Vous devez vous connecter pour publier un commentaire.
Si votre requête est véritablement ce:
alors que c'est équivalent à:
Si vous essayez d'obtenir la liste des utilisations à partir d'une unique projet, allais-je écrire que:
Si il pourrait y avoir de multiples projets avec le même
ProjectId
, vous voulez aplatir les utilisateurs. Par exemple:Ou dans la syntaxe d'expression de requête:
Remarque le fait que ma variable de portée est appelé
project
, car elle fait référence à un projet, pas un utilisateur. La dénomination est important - attention à elle. Je voudrais également renommer leProjects
etUsers
types de justeProject
etUser
, en supposant que chaque est vraiment fait pour représenter une entité unique..Sinlge
que les filtres de trop dans votre 3ème extrait? Il semble plus agréable et plus lisible à mon humble avis?Le plus générique façon est d'utiliser des
ToList
:Mais il semble que vous vraiment ont un
List<ICollection<Users>>
. Pour "aplatir" qui listeSelectMany
:Un
List<Users>
est déjà unICollection<Users>
- aucune conversion n'est nécessaire.lstUsers
vraiment est.lstUsers
n'est pas unList<User>
. C'est unList<ICollection<User>>
. Vous carte chaque projet à séquence utilisateurs, et non pas à un seul utilisateur. Pour aplatir une collection de collections en seulement une collection de l'intérieur que vous utilisezSelectMany
, ou, dans la syntaxe de requête, vous devez écrire votre requête comme ceci:Maintenant vous avez un
List<User>
pourlstUsers
. Vous pouvez l'assigner à unList<User>
ou unICollection<User>