我有一个LINQ查询
rpt = base.Session.QueryOver<Report>(() => rptAlias).
JoinAlias(() => rptAlias.ReportStatus, () => statusAlias).
JoinAlias(() => rptAlias.Patient, () => patAlias).Left.JoinAlias(() => rptAlias.SoapNotes, () => soapAlias).
JoinAlias(() => patAlias.User, () => usrAlias).Where
(() => (usrAlias.FirstName.IsLike(data, MatchMode.Anywhere)
|| usrAlias.LastName.IsLike(data, MatchMode.Anywhere) || usrAlias.Email.IsLike(data, MatchMode.Anywhere) || (patAlias.DateOfBirth.Date)==(Convert.ToDateTime(data)) ||
(patAlias.MedNexusId.IsLike(data, MatchMode.Anywhere) || patAlias.MedNexusId == null)) && usrAlias.IsDeleted == false
&& rptAlias.IsDeleted == false && rptAlias.IsNormal.IsIn(lstIsNormal)
&& statusAlias.Id.IsIn(lstSearch)
)
.OrderBy(() => usrAlias.LastName).Desc.OrderBy(() => rptAlias.Id).Asc
.Skip(pageNumber * pageSize)
.Take(pageSize)
.List<Report>();
这里你必须注意到一个变量数据,现在问题是它包含我们在视图中的文本框中输入的内容,因此它可能包含 1.第一个名字 2.姓氏 3.Id 4.Email Id 5.出生日期
或最坏的情况是它也可以为空,所以当它包含出生日期时,一切都很好,但在其他情况下数据的格式不正确,不能作为参数传递给Convert.ToDateTime
和我得到例外。
所以我的问题是如何预先检查数据的格式是否正确?
答案 0 :(得分:3)
您应该使用DateTime.TryParse
。
在创建查询之前,您需要解析字符串,这是一件好事 - 确保您的输入首先是正确的,然后处理它。
答案 1 :(得分:0)
试试这个:
DateTime myDt;
bool parsed = DateTime.TryParseExact(date,"d/M/yyyy",null,out myDt);
if(parsed) DoSomething;
实际上,DateTime.TryParseExact正在处理一个Date模板,你在这里看到它是“d / M / yyyy”,并尝试匹配字符串,就像“12/03/1902”那样。在这里找到更多: http://msdn.microsoft.com/en-us/library/ms131044(v=vs.110).aspx
您也可以使用DateTime.TryParse