我已经写了一个Linq to Xml查询,从xml创建实体,我在xml中有一个DateTime字段,可能是空白的,我需要将相同的空白分配给实体中的字段,我得到一个错误“字符串未被识别为DateTime”
XDocument xDocument = XDocument.Load(@“c:\ Sample.xml”);
var _pndList =
from plist in
xDocument.Descendants("HEADER")
select new PND()
{
DeliveryDate =
DateTime.ParseExact(Convert(plist, "DELIVERYDATE"), "yyyyMMdd",
CultureInfo.InvariantCulture, DateTimeStyles.None),
LoadClosed =
DateTime.ParseExact(Convert(plist, "LOADCLOSEDDATETIME"), "yyyyMMddhhmmss",
CultureInfo.InvariantCulture, DateTimeStyles.None),
TrailerId = Convert(plist, "TRAILERID"),
TripAndRouteId = Convert(plist, "TRIPROUTEID"),
StoreCode = plist.Ancestors("STORE").Attributes().First().Value,
Product =
(from mlist in
plist.Ancestors("STORE").Descendants("RECORD")
select new PreNotifiedProduct()
{
DepotCode = Convert(plist, "DEPOTCODE"),
MU = Convert(mlist, "MU"),
CaseOrUnitQuantity =
System.Convert.ToInt32("0" + Convert(mlist, "NOOFCASES")),
OuterCaseHeight =
System.Convert.ToInt32("0" +
Convert(mlist, "OUTERCASEHEIGHT")),
OuterCaseLength =
System.Convert.ToInt32("0" +
Convert(mlist, "OUTERCASELENGTH")),
OuterCaseWidth =
System.Convert.ToInt32("0" + Convert(mlist, "OUTERCASEWIDTH")),
ProductCode = Convert(mlist, "TPNB"),
UnitsPerCase =
System.Convert.ToInt32("0" + Convert(mlist, "UNITSPERCASE")),
UseByDate =
DateTime.ParseExact(Convert(plist, "LOADCLOSEDDATETIME"),
"yyyyMMddhhmmss",
CultureInfo.InvariantCulture,
DateTimeStyles.None)
}).ToList()
};
}
在Entity PreNotifiedProduct()中,UseByDate属于DateTime
答案 0 :(得分:1)
尝试使用Nullable(T)
DateTime
,DateTime?
或null
代替DateTime.MinValue
。
如果您使用某种数据库支持的存储,我建议不要使用MinValue
,因为您需要确保数据库类型的正确精度,以便它们匹配。
private static DateTime? TryParseDateTime(string dateTime)
{
DateTime result;
return DateTime.TryParseExact(dateTime,
"yyyyMMddhhmmss",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out result)
? result
: null;
}
用法:
UseByDate = TryParseDateTime(Convert(plist, "LOADCLOSEDDATETIME"))
答案 1 :(得分:0)
DateTime
不能为空或为空。您可以使用DateTime.MinValue
(默认值)或将其更改为可以为空的DateTime?
,然后可以设置为空。
如果字符串可能无法转换为DateTime,您还应该使用DateTime.TryParse
。如果空白值是唯一的例外,您可以在尝试解析之前检查它。
答案 2 :(得分:0)
检查日期值是否为空白, 如果它是空白然后不转换它。
您可以使用三元运算符来避免此类错误
答案 3 :(得分:0)
是否可以将UseByDate设置为“DateTime?”的类型?让它可以为空。
然后你可能需要写一些逻辑来测试它是否是一个有效的日期。也许写一个这样的函数。
static DateTime? TestDate(string date)
{
DateTime result;
if (DateTime.TryParse("", out result))
{
return result;
}
return null;
}