You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#和LINQ获取列表数据?解决类型转换报错问题

遍历城市列表获取数据的类型转换错误修复

错误信息

无法隐式转换类型“System.Collections.Generic.List<StateAPI.Models.CityModel>”为“StateAPI.Models.CityModel”(错误1)
无法从“System.Collections.Generic.List<StateAPI.Models.CityModel>”转换为“StateAPI.Models.CityModel”(错误2)

问题代码

模型类

//Models
namespace StateAPI.Models
{
 public class CityModel: ReadResponse
    {
        public string CityAddress { get; set; }
        public string CityPhone { get; set; }
    }
}

控制器类

//Controller
namespace StateAPI.Controllers
{
    public class CityController : ApiController
    {
        SQLConnection SQLconn = new SQLConnection();

        public CityModel GetCityInfo(string CityList)
        {
            if (string.IsNullOrEmpty(CityList))
            {
                return new CityModel
                {
                    Message = "No CityList Passed",
                };
            }
            else
            {
                return SQLconn.GetCityMain(CityList);  //Error 1
            }
        }
    }
}

GetCityMain方法

public List<CityModel> GetCityMain(string CityList)
{
    String strSQL = String.Empty;
    String msg = String.Empty;
    String[] parms = { };

    List<CityModel> output = new List<CityModel>();
    var cities= CityList.Split(',').Select(x => x.Trim());

    foreach (var city in cities)
    {
        strSQL = String.Format(GetCityInfoSQL, city);
        List<CityModel> info = SQLUtil.GetDataList<CityModel>(
        strSQL,
        parms.ToArray<string>(),
        out msg);

        output.Add(info); //Error 2
    }
    return output;
}

GetDataList方法

public static List<T> GetDataList<T>(string sql, String[] sqlparams, out String message) where T : new()
{
    List<T> result = new List<T>();
    message = String.Empty;
    DataSet ds;

    try
    {
        if (DbObject.GetDataSet(sql, sqlparams, SQLUtility.GetSqlConnString(), "data", out ds, out message))
        {
            result = DataManager.Bind<List<T>>(ds.Tables[0]);
        }
    }
    catch (Exception ex)
    {
        message = "error message";
    }

    return result;
}

错误原因及修复方案

错误1修复

控制器的GetCityInfo方法声明返回单个CityModel,但调用的SQLconn.GetCityMain返回的是List<CityModel>,类型不匹配。

修改控制器方法的返回类型为List<CityModel>,同时处理空参数的情况:

public List<CityModel> GetCityInfo(string CityList)
{
    var result = new List<CityModel>();
    if (string.IsNullOrEmpty(CityList))
    {
        result.Add(new CityModel
        {
            Message = "No CityList Passed",
        });
    }
    else
    {
        result = SQLconn.GetCityMain(CityList);
    }
    return result;
}

错误2修复

GetDataList<CityModel>返回的是List<CityModel>,而output.Add方法需要的是单个CityModel对象,直接添加列表会导致类型不匹配。

如果查询单个城市会返回包含一条数据的列表,使用AddRange将列表中的所有元素添加到output中:

foreach (var city in cities)
{
    strSQL = String.Format(GetCityInfoSQL, city);
    List<CityModel> info = SQLUtil.GetDataList<CityModel>(
    strSQL,
    parms.ToArray<string>(),
    out msg);

    output.AddRange(info); // 替换Add为AddRange
}

如果确定每条SQL只会返回一个城市数据,也可以取列表的第一个元素添加(需处理空列表情况):

if (info.Any())
{
    output.Add(info.First());
}

内容的提问来源于stack exchange,提问作者Jason M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:40:32