2016-04-25 9 views
-2

Mit diesem Code:Um was soll ich diesen Typ explizit konvertieren?

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() 
     }); 

... Ich erhalte diese Compiler-Fehler:

nicht implizit Kann Typ 'System.Collections.Generic.IEnumerable' auf 'WebAppRptScheduler.Models.UnitReportPairGenerateValsModel.GenerateVals' konvertieren . Es gibt eine explizite Konvertierung (fehlt ein Cast?)

Was muss ich tun, damit es funktioniert?

Weitere Kontext, hier ist der gesamte Controller:

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); 
    } 
} 

... und das Modell:

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" 
    } 
} 

Was muss ich tun, um meine Controller-Methode zu ermöglichen, die sie zurück zu gelangen vier Werte abgefragt?

+0

zeigen Sie uns Ihre 'DbContext' und DbSet –

Antwort

2

Sie wählen eine Sammlung von GenerateVals. Sie müssen entweder Ihre Variable als IEnumerable<GenerateVals> ändern oder Ihre Abfrage so ändern, dass nur ein Element zurückgegeben wird (z. B. mithilfe von .Single() oder .First()).

+1

Da es nie mehr als einen Satz von vals sein sollte, die zurückgegeben wird, Ich mag" Single "- für mich ist es ein Homerun. –

2

Ändern Sie UnitReportPairGenerateValsModel.GenerateVals zu IEnumerable<UnitReportPairGenerateValsModel.GenerateVals>. Die Auswahl gibt IEnumerable des für die Projektion angegebenen Typs zurück.

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() 
        }); 
3

Wenn Sie faul sind, machen alles ein Array:

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(); 
Verwandte Themen