Во что я должен явно конвертировать этот тип?
С этим кодом:
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 мог передать обратно четыре запрошенных значения?
3 ответа
Вы выбираете коллекцию GenerateVals
, Вам нужно будет либо изменить вашу переменную, чтобы быть IEnumerable<GenerateVals>
или измените ваш запрос, чтобы он возвращал только один элемент (например, используя .Single()
или же .First()
).
Если вы ленивы, сделайте все массивом:
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();
+ Изменить 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()
});