【问题标题】:Error Converting Datatable to IEnumerable将数据表转换为 IEnumerable 时出错
【发布时间】:2015-11-07 10:35:06
【问题描述】:

我收到以下错误

错误:- 无法隐式转换类型 'System.Data.EnumerableRowCollection' 到 'System.Collections.Generic.IEnumerable'。 存在显式转换(您是否缺少 演员?) C:\Users\e19206\Documents\Visual Studio 2010\Projects\TerroristMVC\TerroristBAL\Models\Landingbal.cs 51 20 TerroristBAL

这是我的代码

public IEnumerable<Landing> getReportSummary()
{
    DataTable dtRepSummary = new DataTable();

    try
    {
        procname = "TDS_QUERY.GET_REP_SUMMARY";

        OracleParameter[] oraParam = new OracleParameter[1];

        oraParam[0] = new OracleParameter("TDS_RECORDSET", OracleDbType.RefCursor);
        oraParam[0].Direction = ParameterDirection.Output;

        connection = new OracleConnection(SqlHelper.GetConnection());

        DataSet ds = SqlHelper.ExecuteDataset(connection, CommandType.StoredProcedure, procname, oraParam);

        dtRepSummary = ds.Tables[0];
    }
    catch (Exception ex)
    {
        string errormessage = "Method name:- " + MethodBase.GetCurrentMethod().Name + " | Description: " + ex.Message + " " + ex.InnerException;
        log.Error(errormessage);
    }

    return dtRepSummary.AsEnumerable();
}

这是我登陆的Model类

public class Landing
{
    #region properties

    public string Reportid { get; set; }

    public string Reportdate { get; set; }

    public string Fromdate { get; set; }

    public string Todate { get; set; }

    public string Executed { get; set; }

    public string Userid { get; set; }

    public string Recadddate { get; set; }

    #endregion
} 

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    您收到该错误是因为dtRepSummary.AsEnumerable() 返回IEnumerable&lt;DataRow&gt;,但您的返回类型为IEnumerable&lt;Landing&gt;,您可以使用Select 像这样投影您的类型:-

    return dtRepSummary.AsEnumerable().Select(x => new Landing
                                            {
                                               Reportid = x.Field<int>("Reportid"), 
                                               Reportdate = x.Field<string>("Reportdate"),
                                               ..and so on
                                            };
    

    【讨论】:

    • 请注意,这还需要引用 System.Data.DataSetExtensions.dll 程序集才能使用 AsEnumerable 和 Field(它们是 DataTableExtensions 类的一部分)
    • @SimonMourier - 是的,OP 已经在使用那个 cz,目前他正在返回 dtRepSummary.AsEnumerable()
    • 我想是的,但阅读问题并不清楚,是标签还是答案
    • 很好用。是否有必要按照 asp.net mvc 4 将 Datatable 转换为 ienumerable ?
    • @Vineet - 不,这不是强制性的,您可以像这样@model System.Data.DataTable 更改您的视图,然后从控制器返回DataTable,但恕我直言,与DataTable 相比,使用IEnumerable 更容易。
    猜你喜欢
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多