【问题标题】:To what should I explicitly convert this type?我应该将此类型显式转换为什么?
【发布时间】:2016-04-25 17:34:20
【问题描述】:

使用此代码:

UnitReportPairGenerateValsModel.GenerateVals generateVals =
    (from DataRow row in UnitReportPairGenerateValsDT.Rows
        select new UnitReportPairGenerateValsModel.GenerateVals
        {
            DayOfMonth = Convert.ToInt32(row["DayOfMonth"]),
            PatternOrdinal = row["PatternOrdinal"].ToString(),
            PatternDOW = row["PatternDOW"].ToString(),
            PatternInterval = row["PatternInterval"].ToString()
        });

...我得到这个编译器错误:

无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“WebAppRptScheduler.Models.UnitReportPairGenerateValsModel.GenerateVals”。存在显式转换(您是否缺少演员表?)

我需要做什么才能让它工作?

更多上下文,这里是整个控制器:

public class UnitReportPairGenerateValsController : Controller
{
    public JsonResult GetUnitReportPairGenerateVals(string unit, string report)
    {
        UnitReportPairGenerateValsModel model = new UnitReportPairGenerateValsModel();
        try
        {
            int rptId = SQL.GetReportIDForName(report);

            string qry = string.Format(SQL.UnitReportPairGenerateQuery, unit, rptId);
            DataTable UnitReportPairGenerateValsDT = SQL.ExecuteSQLReturnDataTable(
                qry,
                CommandType.Text,
                null
                );

            UnitReportPairGenerateValsModel.GenerateVals generateVals =
                (from DataRow row in UnitReportPairGenerateValsDT.Rows
                    select new UnitReportPairGenerateValsModel.GenerateVals
                    {
                        DayOfMonth = Convert.ToInt32(row["DayOfMonth"]),
                        PatternOrdinal = row["PatternOrdinal"].ToString(),
                        PatternDOW = row["PatternDOW"].ToString(),
                        PatternInterval = row["PatternInterval"].ToString()
                    });

            model.generatevals = generateVals; 
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        return Json(model, JsonRequestBehavior.AllowGet);
    }   
}

...和模型:

public class UnitReportPairGenerateValsModel
{
    public GenerateVals generatevals { get; set; }

    public class GenerateVals
    {
        public int DayOfMonth { get; set; }
        public string PatternOrdinal { get; set; } // such as "First", "Third", "Last" etc.
        public string PatternDOW { get; set; } // such as "Monday", "Tuesday" etc.
        public string PatternInterval { get; set; } // either "Week" or "Month"
    }
}

我需要做什么才能让我的 Controller 方法传回所查询的四个值?

【问题讨论】:

  • 向我们展示您的 DbContext 和 DbSet

标签: c# asp.net-mvc implicit-conversion explicit-conversion


【解决方案1】:

如果你很懒,把所有东西都变成一个数组:

public class UnitReportPairGenerateValsModel
{
    public GenerateVals[] generatevals { get; set; }



UnitReportPairGenerateValsModel.GenerateVals[] generateVals =
    (from DataRow row in UnitReportPairGenerateValsDT.Rows
        select new UnitReportPairGenerateValsModel.GenerateVals
        {
            DayOfMonth = Convert.ToInt32(row["DayOfMonth"]),
            PatternOrdinal = row["PatternOrdinal"].ToString(),
            PatternDOW = row["PatternDOW"].ToString(),
            PatternInterval = row["PatternInterval"].ToString()
        }).ToArray();

【讨论】:

    【解决方案2】:

    您正在选择GenerateVals 的集合。您需要将变量修改为 IEnumerable<GenerateVals> 或修改查询以仅返回一项(例如,使用 .Single().First())。

    【讨论】:

    • 因为返回的 val 不应该超过一组,所以我喜欢“Single”——对我来说,这是一个本垒打。
    【解决方案3】:

    UnitReportPairGenerateValsModel.GenerateVals 更改为IEnumerable<UnitReportPairGenerateValsModel.GenerateVals>。选择返回为投影指定的类型的 IEnumerable。

    IEnumerable<UnitReportPairGenerateValsModel.GenerateVals> generateVals =
                    (from DataRow row in UnitReportPairGenerateValsDT.Rows
                        select new UnitReportPairGenerateValsModel.GenerateVals
                        {
                            DayOfMonth = Convert.ToInt32(row["DayOfMonth"]),
                            PatternOrdinal = row["PatternOrdinal"].ToString(),
                            PatternDOW = row["PatternDOW"].ToString(),
                            PatternInterval = row["PatternInterval"].ToString()
                        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多