IEnumerable<> IList<>
Je suis à l'aide de Linq pour interroger ma base de données et le retour d'un générique de IList.
Ce que j'ai essayé, je ne pouvais pas convertir un IQueryable à un IList.
Voici mon code.
Je ne peux pas écrire plus simple que cela et je ne comprends pas pourquoi il ne fonctionne pas.
public IList<IRegion> GetRegionList(string countryCode)
{
var query = from c in Database.RegionDataSource
where (c.CountryCode == countryCode)
orderby c.Name
select new {c.RegionCode, c.RegionName};
return query.Cast<IRegion>().ToList();
}
Cela renvoie une liste avec un nombre d'articles, mais ils sont tous vides
S'il vous plaît aider, je suis bloqued avec ce pour un couple de jours maintenant
Cette question et les réponses vraiment d'illustrer la question de duck-typing, et C#/Linq limitations
OriginalL'auteur nachid | 2010-04-28
Vous devez vous connecter pour publier un commentaire.
Votre
select
instruction renvoie un type anonyme:new {c.RegionCode, c.RegionName}
Cela ne peut pas être converti à
IRegion
- qui serait grosso modo de Canard-typage, qui C# ne prend pas en charge.Votre linq déclaration doit retourner un type qui implémente
IRegion
- puis votre code devrait fonctionner.Cependant, il ne faut pas courir le
Cast<IRegion>
doit lancer une exception d'exécution.En gros:
Mise à jour
Si le sous-jacent Linq type implémente
IRegion
cela peut être beaucoup plus simple:Cast<IRegion>()
maintenant que vous êtes à se projeter dans un type de béton.Oui, il va -
IList<T>
est invariante.J'ai mon Linq générée automatiquement classe de la Région qui implémente IRegion. Lorsque je l'utilise, j'ai reçu un autre message d'erreur Explicite de la construction de l'entité de type " xxxx.LinqToSql.xxxx.Région' dans la requête n'est pas autorisé.
Oui, bien sûr.
IRegion
est le type de retour. mon mauvaisahh, je pense que nous avons un correctif!
Database.RegionDataSource
retourneRegion
. Pour résoudre tous vous avez besoin est à la fin, avecselect c
OriginalL'auteur Keith
Je suis surpris qu'il n'est pas seulement à défaut de complètement - vous êtes en train de jeter chaque résultat à un
IRegion
, mais vous êtes la génération des instances d'un type anonyme, qui ne sera certainement pas mettre en œuvreIRegion
.Ne vous ont un type concret qui met en œuvre
IRegion
?OriginalL'auteur Jon Skeet
Le casting de
IRegion
ne fonctionne pas. Vous êtes à la sélection d'un type anonyme pour ne pas les mettre en œuvreIRegion
. Est-il un moyen que vous pouvez créer une instance de quelque chose qui met en œuvre IRegion?OriginalL'auteur Mike Two
Peut-être vous avez besoin de quelque chose comme ceci:
Skeet est correct. Vous avez besoin de la
Cast<IRegion>()
OriginalL'auteur Matt Kocaj
Peut-être vous avez besoin de quelque chose comme ceci:
OriginalL'auteur stackuser1