Lors de l'analyse d'un objet DataTable à l'aide de Lambda, je ne vois pas ce qui ne va pas dans le code suivant.La distribution spécifiée n'est pas valide pour l'analyse lambda Datetime C#
List<ApprovalPCNReportViewModel> report = GetApprovalPCNReport().AsEnumerable().Select(m => new ApprovalPCNReportViewModel()
{
PCNNotificationNumber = m.Field<String>("NotifiDocNumber"),
CreatedDate = m.Field<DateTime>("CreatedDate"),
EmailRecipients = m.Field<String>("EmailRecipients"),
EmailSentDate = m.Field<DateTime>("EmailSentDate"),
EmailOpenedDate = m.Field<DateTime>("EmailOpenedDate"),
MailFrequency = m.Field<int>("MailFrequency"),
ApprovedDate = m.Field<DateTime>("ApprovedDate"),
ApprovedBy = m.Field<String>("ApprovedBy")
}).ToList();
DataTable reliure -
public DataTable GetApprovalPCNReport()
{
DataTable dt = new DataTable();
dt.Columns.Add("NotifiDocNumber");
dt.Columns.Add("CreatedDate");
dt.Columns.Add("EmailRecipients");
dt.Columns.Add("EmailSentDate");
dt.Columns.Add("EmailOpenedDate");
dt.Columns.Add("MailFrequency");
dt.Columns.Add("ApprovedDate");
dt.Columns.Add("ApprovedBy");
for (int i = 0; i < 100; i++)
{
DataRow dr = dt.NewRow();
dr["NotifiDocNumber"] = "Column1 - Row " + i;
dr["CreatedDate"] = DateTime.Now;
dr["EmailRecipients"] = "Column3 - Row " + i;
dr["EmailSentDate"] = DateTime.Now;
dr["EmailOpenedDate"] = DateTime.Now;
dr["MailFrequency"] = i;
dr["ApprovedDate"] = DateTime.Now;
dr["ApprovedBy"] = "Column6 - Row " + i;
dt.Rows.Add(dr);
}
return dt;
}
Voici les données - The DataTable values
Le modèle de vue (ApprovalPCNReportViewModel) -
public String PCNNotificationNumber { get; set; }
public DateTime? CreatedDate { get; set; }
public String EmailRecipients { get; set; }
public DateTime EmailSentDate { get; set; }
public DateTime EmailOpenedDate { get; set; }
public Int32 MailFrequency { get; set; }
public DateTime ApprovedDate { get; set; }
public String ApprovedBy { get; set; }
Je suis assez sûr l'exception de transtypage incorrect est en cours sur DateTime et Int. Une idée d'où je me suis trompé?
Avez-vous essayé 'CreatedDate = m.Field (" CreatedDate ")'? Notez que 'DateTime?' N'est pas la même chose que 'DateTime'. –
@TetsuyaYamamoto Je * pense * que cela devrait être correct, car vous êtes [autorisé] (http://share.linqpad.net/f9445g.linq) pour définir un 'DateTime?' À un 'DateTime'. –
Tous les champs de 'DataTable' correspondent-ils réellement au type de données que vous essayez de retirer du champ? c'est à dire. Est-ce que 'CreatedDate' * est vraiment * un' DateTime' et pas un 'string' qui ressemble à un' DateTime'? –