2016-11-04 9 views
1

ループ内のクラスオブジェクトに値を割り当てていますが、NULL値のためにエラーが発生しています。オブジェクト内のDateTimeへの文字列の日付変換のNULL条件を確認してください。

私の質問は、私は、オブジェクト

foreach (var item in _query) 
{ 
    EnrolmentList.Add(new EnrolmentEntity 
    { 
     PeopleUnitsID = item.PeopleUnitsID, 
     PersonCode = item.PersonCode, 
     UnitType = item.UnitType, 
     ProgressCode = item.ProgressCode, 
     ProgressStatus = item.ProgressStatus, 
     ProgressDate = Convert.ToDateTime(item.ProgressDate), 
     UnitInstanceID = item.UnitInstanceID, 
     UnitInstanceOccurrenceID = item.UnitInstanceOccurrenceID, 
     CourseCode = item.CourseCode, 
     OwningOrganisation = item.OwningOrganisation, 
     CalendarOccurrenceCode = item.CalendarOccurrenceCode, 
     FES_Start_Date = Convert.ToDateTime(item.FES_Start_Date), 
     AimStartDate = Convert.ToDateTime(item.AimStartDate) 
    }); 
} 

内の値をチェックするためにLINQを使用することができ、私は彼らがnullかそうでないかどうかを確認する必要が3つの日付変数があります。 nullの場合、私は、クエリから項目を削除したい場合は、クエリに

.Where(item => item.ProgressDate != null) 

を追加することができ、日付

+0

?それらが文字列である場合はnullになりますが、 'Nullable 'である場合のみです。また、 'ProgressDate'、' FES_Start_Date'と 'AimStartDate'がどのように見えるかの例を示してください。彼らは弦ですか? –

+0

あなたの日付はどのように "null"ですか?彼らがヌル可能な日付でなければ、それは存在しません。通常の日付は値の型です。編集:私はそれらを日付に変換*しようとしているのを見ます。さて、その前には何がありますか? –

+0

使用しているデータ型を含め、正確な問題(例外など)を示す例を簡略化する必要があります。そうでない場合は質問があいまいです。 –

答えて

0

私はとして日付の会話の場合はnullチェック文字列を持っています。

public class EnrolmentEntity 
{ 

    public DateTime? ProgressDate { get; set; } 

    public DateTime? FES_Start_Date { get; set; } 

    public DateTime? AimStartDate { get; set; } 
} 

//

public class Enrolments 
{  
    [XmlElement("PROGRESS_STATUS")] 
    public string ProgressStatus { get; set; } 

    [XmlElement("PROGRESS_DATE")] 
    public string ProgressDate { get; set; } 

    [XmlElement("FES_START_DATE")] 
    public string FES_Start_Date { get; set; } 

    [XmlElement("AIM_START")] 
    public string AimStartDate { get; set; } 

} 

//

foreach (var item in _query) 
    { 
    EnrolmentList.Add(new EnrolmentEntity 
     { 
     PeopleUnitsID = item.PeopleUnitsID, 
     PersonCode = item.PersonCode, 
     UnitType = item.UnitType, 
     ProgressCode = item.ProgressCode, 
     ProgressStatus = item.ProgressStatus, 
     ProgressDate = string.IsNullOrEmpty(item.ProgressDate) ? (DateTime?)null : DateTime.Parse(item.ProgressDate), 
     UnitInstanceID = item.UnitInstanceID, 
     UnitInstanceOccurrenceID = item.UnitInstanceOccurrenceID, 
     CourseCode = item.CourseCode, 
     OwningOrganisation = item.OwningOrganisation, 
     CalendarOccurrenceCode = item.CalendarOccurrenceCode, 
     FES_Start_Date = string.IsNullOrEmpty(item.FES_Start_Date) ? (DateTime?)null : DateTime.Parse(item.FES_Start_Date), 
     AimStartDate = string.IsNullOrEmpty(item.AimStartDate)? (DateTime?)null :DateTime.Parse(item.AimStartDate) 
}); 
あなたは `_query`を作成している
3

に変換するというし、それを無視する必要があります。あなたがnullであるが、まだアイテムを使用する日付を解析しないようにしたい場合は

私はあなたのデータがあると仮定しConvert.ToDateTime()機能の使用から、あなたのオブジェクト作成

1

ProgressDate = item.ProgressDate != null ? Convert.ToDateTime(item.ProgressDate) :null 

を使用することができますタイプです。 ?: operator checkがnullであるかどうかを確認します。そうであれば、デフォルトのDateTimeの値を使用します。それ以外の場合は変換します。

var defaultDate = DateTime.MinValue; 
EnrolmentList.AddRange(_query.Select(item => new EnrolmentEntity 
    { 
     PeopleUnitsID = item.PeopleUnitsID, 
     PersonCode = item.PersonCode, 
     UnitType = item.UnitType, 
     ProgressCode = item.ProgressCode, 
     ProgressStatus = item.ProgressStatus, 
     ProgressDate = item.ProgressDate == null ? defaultDate : Convert.ToDateTime(item.ProgressDate), 
     UnitInstanceID = item.UnitInstanceID, 
     UnitInstanceOccurrenceID = item.UnitInstanceOccurrenceID, 
     CourseCode = item.CourseCode, 
     OwningOrganisation = item.OwningOrganisation, 
     CalendarOccurrenceCode = item.CalendarOccurrenceCode, 
     FES_Start_Date = item.FES_Start_Date == null ? defaultDate : Convert.ToDateTime(item.FES_Start_Date), 
     AimStartDate = item.AimStartDate == null ? defaultDate : Convert.ToDateTime(item.AimStartDate) 
    })); 

また、あなたは3つの入力日付がDateTimeのtypeof演算していると仮定すると、.Select + AddRange

1

foreach + Addを置き換えることができますか?そして、あなたがnullの場合、デフォルト(日時)を使用することができますしたいGetValueOrDefault()

foreach (var item in _query) 
     { 
      EnrolmentList.Add(new EnrolmentEntity 
      { 
       PeopleUnitsID = item.PeopleUnitsID, 
       PersonCode = item.PersonCode, 
       UnitType = item.UnitType, 
       ProgressCode = item.ProgressCode, 
       ProgressStatus = item.ProgressStatus, 
       ProgressDate = item.ProgressDate.GetValueOrDefault(), 
       UnitInstanceID = item.UnitInstanceID, 
       UnitInstanceOccurrenceID = item.UnitInstanceOccurrenceID, 
       CourseCode = item.CourseCode, 
       OwningOrganisation = item.OwningOrganisation, 
       CalendarOccurrenceCode = item.CalendarOccurrenceCode, 
       FES_Start_Date = item.FES_Start_Date.GetValueOrDefault(), 
       AimStartDate = item.AimStartDate.GetValueOrDefault() 
      }); 
     } 
関連する問題