C#中年,月和日参数的不可表示的DateTime

时间:2013-11-21 11:36:46

标签: c# linq nhibernate

我正面临一些错误,例如“年,月,日参数描述不可表示的DateTime”。但是当我使用另一个数据库时出现这个问题,否则我写的代码工作正常。

为了检查目的,我将PC日期时间从11月改为12月,而不是相同的代码在不同的数据库工作正常。但我没有得到如何解决这个错误。我已经在崩溃的地方附上了一些代码。

var vi = session.Query<TJERecurMaster>().ToList();

                TJEShedulDetail tp = new TJEShedulDetail();

                var RecurMasterList = (from v in vi
                                       join jj in session.Query<TJEShedulDetail>()
                                       on v.FMasterID equals jj.TJERecurMaster.FMasterID into jjv
                                       from jv in jjv.DefaultIfEmpty(tp)
                                       where v.FInactive == false && v.TSCCompany == objCompany && v.TSCProperty == objProp
                                       orderby v.FDescription descending
                                       select new RecurMasterNotification
                                       {
                                           TSCompanyID = CompanyID,
                                           JeRecurDetail = v.TJERecurDetails,
                                           FMasterID = v.FMasterID,
                                           FScheduleID = jv.FScheduleID,
                                           FDescription = v.FDescription,
                                           FPostdate = jv.FLastNotification != null ? jv.FLastNotification : (v.FSetDay != 0 ? new DateTime(DateTime.Now.Year, DateTime.Now.Month, Convert.ToInt32(v.FSetDay)) : DateTime.Now),

                                           FAmount = v.TJERecurDetails.Where(P => P.FTranType == "D").Sum(P => P.FAmount)
                                                        - v.TJERecurDetails.Where(P => P.FTranType == "C").Sum(P => P.FAmount),
                                           FLastCreated = jv.FLastNotification,
                                           FNotes = v.FNotes,
                                           FJEType = v.FJEType,
                                           FInactive = v.FInactive,
                                           Frequency = jv.FFrequency,
                                           FDateSelection = jv.FDateSelection,
                                           FNextNotification = jv.FNextNotification,
                                           FLastCreatedString = jv.FLastNotification == jv.FNextNotification ? string.Empty : jv.FLastNotification.ToString(),
                                       }).ToList();

此类错误的解决方案是什么?

1 个答案:

答案 0 :(得分:2)

我预计此行会发生错误:

FPostdate = jv.FLastNotification != null ? jv.FLastNotification : (v.FSetDay != 0 ? new DateTime(DateTime.Now.Year, DateTime.Now.Month, Convert.ToInt32(v.FSetDay)) : DateTime.Now)

特别是这部分:

new DateTime(DateTime.Now.Year, DateTime.Now.Month, Convert.ToInt32(v.FSetDay))

在这里,您可以创建当前年份和月份的新日期,以及一些v.FSetDay。但是,如果FSetDay在一个月内(如11月)只有30天,那该怎么办?或者它有另一个非法的值,如&lt; 0或&gt; 31?

您需要决定如何处理。你能忽略高于本月天数的价值吗?这里有一个DaysInMonth方法可以使用。