comment convertir une liste de IEnumerable?
J'ai la fonction suivante dans laquelle doit retourner un IEnumerable type?comment puis-je convertir liste de IEnumerable? et le retour d'un vide IEnumerable?
public IEnumerable<SoftwareImageTestPlan> GetAssignedTestPlansForSPSI(int SoftwareProductID, int SoftwareImageID)
{
var records = _entities.tblSoftwareImageTestPlans
.Where(x => x.SoftwareProductID == SoftwareProductID && x.SoftwareImageID == SoftwareImageID)
.ToList();
if (records == null)
return new List<SoftwareImageTestPlan>();
else
return records;
}
Erreur:
Ne peut pas implicty convertir type de Système.Les Collections.Génériques.Liste<....>
Système.Les Collections.Génériques.IEnumerable<.....>.Une conversion explicite
existe(vous manque un plâtre?)
Un
Kenneth - j'ai ajouté une capture d'écran de l'erreur
Les espaces de noms ne sont pas les mêmes, donc ils ne sont pas du même type.
List<T>
est un IEnumerable<T>
de sorte que vous ne devriez pas avoir besoin de convertir quoi que ce soit. Pouvez-vous nous donner le message complet? (... remplacés par les types réels).Kenneth - j'ai ajouté une capture d'écran de l'erreur
Les espaces de noms ne sont pas les mêmes, donc ils ne sont pas du même type.
OriginalL'auteur Flair | 2017-01-06
Vous devez vous connecter pour publier un commentaire.
Problème n'est pas dans la convertation des
List<T>
àIEnumerable<T>
. Parce queList<T>
implémenteIEnumerable<T>
.Votre problème est que les paramètres sont différents. Vous essayez de convertir
List<T1>
àIEnumerable<T2>
. Où:QlasrService.EntityFramework.tblSoftwareImageTestPlan
QlasrService.Model.SchemaModels.LAP.SoftwareImageTestPlan
Solution la plus simple sera de cartographie (qu'il soit manuel ou automatique). Mappage automatique est très facile. Ajouter Automapper package nuget. Placez cette ligne quelque part au lancement de l'application:
Et maintenant, votre méthode va ressembler:
REMARQUE: Dans votre code soit
records
ne peut pas avoirnull
valeur, ou vous aurezNullReferenceException
àToList()
appel. Doncif..else
bloc est inutile de toute façon.query body end with a select clause or a group clause
,aussi qu'est-ce que l'espace de noms à utiliserMapper
désolé, manqué
select tp
ligne. Désormais sa bonne. Mappeur de l'espace de noms estusing Automapper;
OriginalL'auteur Sergey Berezovskiy
Vous êtes de retour de deux types d'objets différents:
Par conséquent, lorsque vous indiquer ce qui suit:
Il va se plaindre que le
records
objet n'est pas de typeSoftwareImageTestPlan
. Par conséquent, vous avez besoin de convertirrecords
dans une nouvelleList<SoftwareImageTestPlan>
que vous pouvez obtenir via unLINQ projection
.Vous pouvez ensuite utiliser votre déclaration d'origine:
ou need to convert records into a new List<SoftwareImageTestPlan> which you can achieve via a LINQ projection
?J'ai mis à jour ma réponse à inclure cette.
Notez également que dans la fin, vous pouvez même le faire
return records ?? new List<SoftwareImageTestPlan>();
Darren - a Été mise à jour juste un exemple ou réelle de la syntaxe qui fonctionne pour vous?J'ai difficulté à se rendre au travail
essayez
entities in _entities.tblSoftwareImageTestPlans
plutôt que=
. Ma réponse contient la totalité de l'extrait.OriginalL'auteur Darren
Le problème n'est pas ici ce que vous avez besoin de les convertir à partir de
List
àIEnumerable
.Le problème, c'est que vous tentez de convertir de
List<tblSoftwareImageTestPlan>
àIEnumerable<SoftwareImageTestPlan>
Ceux sont deux totalement différents types, en raison du type d'argument.
Solutions possibles:
IEnumerable<tblSoftwareImageTestPlan>
Carte les objets à
SoftwareImageTestPlan
par projection de l'tblSoftwareImageTestPlan
à unSoftwareImageTestPlan
:OriginalL'auteur Kenneth