ラムダを使用してDataTableオブジェクトを解析する際に、次のコードで何が問題になるかはわかりません。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 - The DataTable values
ビューモデル(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; }
私はかなり確信している
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;
}
ここでは、データがありますDateTimeとIntで無効なキャスト例外が発生しています。どこが間違っていたのか?コメントする
あなたは 'CreatedDate = m.Field(" CreatedDate ")'を試しましたか? 'DateTime?'は 'DateTime'と同じではないことに注意してください。 –
@ TetsuyaYamamoto「DateTime?」を「DateTime」に設定することができます(http://share.linqpad.net/f9445g.linq)。 –
'DataTable'のすべてのフィールドは、実際にフィールドから取り出そうとしているデータ型と一致していますか?すなわち、 'CreatedDate' *は本当に' DateTime'であり、 'DateTime'のように見える' string'ではありませんか? –