Impossible de convertir l'objet de type WhereSelectListIterator
J'ai été de tenter de comprendre pourquoi une requête Linq qui renvoie une liste des états des États-unis formaté pour une liste déroulante ne sera pas jeté dans une Liste lorsque le code renvoie à la méthode appelante. L'erreur que je reçois est:
Impossible de convertir l'objet de type 'WhereSelectListIterator'2[StateListing.States,<>f__AnonymousTypea'2[System.String,System.String]]"pour le" type de Système.Les Collections.Génériques.Liste`1[StateListing.Membres]'
L'espace de noms StateListing de l'erreur, est une bibliothèque dll qui dispose d'une classe appelée Etats retour d'un IEnumerable Liste des états indiqués ci-dessous.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace StateListing
{
public class States
{
public string StateAbbriviation { get; set; }
public int StateID { get; set; }
public string StateName { get; set; }
static int cnt = 0;
public static IEnumerable<States> GetStates()
{
return new List<States>
{
new States
{
StateAbbriviation = "AL",
StateID=cnt++,
StateName = "Alabama"
},
new States
{
StateAbbriviation = "AL",
StateID=cnt++,
StateName = "Alaska"
}
//Continued on with the rest of states
}.AsQueryable();
}
}
}
Dans mon contrôle, je fais un appel à GetStates qui retourne une Liste des États à partir de la bibliothèque de classe ci-dessus.
[HttpPost]
public JsonResult GetStateOptions()
{
try
{
//Return a list of options for dropdown list
var states = propertyRepository.GetStates();
return Json(new { Result = "OK", options = states });
}
Dans la propriété référentiel de la classe, j'ai deux méthodes pour obtenir la StateList à partir de la bibliothèque, et un autre pour le format de la liste des états pour une liste déroulante dans mon point de vue.
public List<States> GetStateList()
{
var items = (from s in States.GetStates()
select s).ToList();
return items;
}
List<States> IPropertyRepository.GetStates()
{
try
{
List<States> RawStates = GetStateList();
var stateList = RawStates.Select(c => new { DisplayText = c.StateName, Value = c.StateID.ToString() });
return (List<States>)stateList; //<=== Error
}
L'erreur se produit lorsque le code atteint le retour au sein de la GetStates méthode.
Toute aide avec ce casting problème d'expliquer ce que je fais mal serait appréciée.
OriginalL'auteur Shawn | 2013-03-03
Vous devez vous connecter pour publier un commentaire.
Vous projetez votre requête LINQ pour un anonymmous objet et non pas à un État de la liste qui, évidemment, ne peuvent pas travailler. Les 2 types sont incompatibles. Donc, commencer par la modification de votre dépôt de la couche et de se débarrasser de la
GetStateList
méthode:et ensuite le projet de la structure désirée dans votre contrôleur:
OriginalL'auteur Darin Dimitrov
C'est le problème:
Deux questions:
Select
ne retourne pas uneList<T>
States
objets; vous êtes à la sélection d'un type anonymeLa première est réparable à l'aide de
ToList()
; la seconde est réparable soit en changeant votreSelect
appel ou en changeant votre mode de type de retour. Ce n'est pas vraiment clair ce que vous voulez vraiment de retour, étant donné queStates
n'ont pas deDisplayText
ouValue
propriété.Je attendre une méthode de
GetStates
de retour aux états - auquel cas vous avez déjàGetStatesList()
qui sans doute fait ce que vous voulez déjà.Fondamentalement, vous avez besoin de réfléchir sur le type que vous voulez vraiment revenir, et faire à la fois votre méthode de type de retour, et le corps de la méthode de match.
Mais comprenez-vous comment votre méthode de déclarer qu'il serait de retour d'un
List<States>
est incompatible avec le présent?OriginalL'auteur Jon Skeet