我一直试图弄清楚为什么当代码返回调用方法时,返回格式化为下拉列表的美国州列表的 Linq 查询不会转换为列表。我得到的错误是:
无法将 'WhereSelectListIterator'2[StateListing.States,<>f__AnonymousTypea'2[System.String,System.String]]' 类型的对象转换为类型 'System.Collections.Generic.List`1[StateListing.States]'
来自错误的命名空间 StateListing 是一个 dll 库,它有一个名为 States 的类,它返回一个 IEnumerable 状态列表,如下所示。
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();
}
}
}
在我的控制下,我调用 GetStates 从上面的类库中返回一个状态列表。
[HttpPost]
public JsonResult GetStateOptions()
{
try
{
//Return a list of options for dropdown list
var states = propertyRepository.GetStates();
return Json(new { Result = "OK", options = states });
}
在属性存储库类中,我有两种方法,一种是从库中获取 StateList,另一种是为我的视图中的下拉列表格式化状态列表。
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
}
当代码到达 GetStates 方法中的返回值时,就会发生错误。
任何有关此铸造问题的帮助解释我做错了什么将不胜感激。