1

xml からエンティティを作成するために、Linq to 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()
               };
    }

エンティティ PreNotifiedProduct() で UseByDate は DateTime です

4

4 に答える 4

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"))
于 2013-05-02T12:22:08.787 に答える
0

「DateTime」のタイプとして UseByDate を設定することは可能でしょうか? null 可能にします。

次に、有効な日付であるかどうかをテストするロジックを作成する必要がある場合があります。おそらく、このような関数を書きます。

    static DateTime? TestDate(string date)
    {
        DateTime result;
        if (DateTime.TryParse("", out result))
        {
            return result;
        }
        return null;
    }
于 2013-05-02T12:24:06.183 に答える