2016-05-26 19 views
1

私はdt1Clonedとdt2Clonedという名前の2つのデータテーブルを持っています。私は次のようにこれら2つのテーブルを結合するためにLINQクエリを実装している:この上記のクエリをimplimentingでDBNull.Valueを型 'System.DateTime'にキャストできません。 null可能な型を使用してください。 on Linq Query

var res = (from p in dt1Cloned.AsEnumerable() 
       join t in dt2Cloned.AsEnumerable() 
      on p.Field<Int64>("WorkId") equals t.Field<Int64>("WorkId") 
      select new 
       { 
        DivisionId = p.Field<Int64>("DivisionId"), 
        DistrictId = p.Field<Int64>("DistrictId"), 
        MCId = p.Field<Int64>("MCId"), 
        ACId = p.Field<Int64>("ACId"), 
        PCId = p.Field<Int64>("PCId"), 
        DivisionName = p.Field<string>("DivisionName"), 
        DistrictName = p.Field<string>("DistrictName"), 
        MCName = p.Field<string>("MCName"), 
        AssemblyCName = p.Field<string>("AssemblyCName"), 
        ParliamentaryCName = p.Field<string>("ParliamentaryCName"), 
        WorkId = p.Field<Int64>("WorkId"), 
        WorkDetail = p.Field<string>("WorkDetail"), 
        WorkName = p.Field<string>("WorkName"), 
        RoadCode = p.Field<string>("RoadCode"), 
        AdApp = p.Field<string>("AdApp"), 
        //!Convert.IsDBNull(dr.t1.Field<DateTime?>("Step Start Time")) ? dr.t1.Field<DateTime?>("Step Start Time") : DBNull.Value 
        //AdminAppDate = !Convert.IsDBNull(p.Field<DateTime>("AdminAppDate")) ? p.Field<DateTime>("AdminAppDate") : DBNull.Value, 
        AdminAppDate = p.Field<DateTime>("AdminAppDate"), 
        TargetDate = p.Field<DateTime>("TargetDate"), 
        AppAmt = p.Field<Int64>("AppAmt"), 
        TApp = p.Field<string>("TApp"), 
        TechAppDate = p.Field<DateTime>("TechAppDate"), 
        TAppAmt = p.Field<Int64>("TAppAmt"), 
        SourceOfFunds = p.Field<string>("SourceOfFunds"), 
        AllocatedAmt = p.Field<Int64>("AllocatedAmt"), 
        ReleaseAmt = p.Field<Int64>("ReleaseAmt"), 
        WStatus = p.Field<string>("WStatus "), 
        Expenditure = p.Field<string>("Expenditure"), 
        ExpenditurePer = p.Field<Int64>("ExpenditurePer"), 
        ProgressPercentage = p.Field<Int64>("ProgressPercentage"), 
        Progress = p.Field<string>("Progress"), 
        UserTypeId = p.Field<Int64>("UserTypeId"), 
        UserWorkType = p.Field<string>("UserWorkType"), 
        SchemeId = p.Field<Int64>("SchemeId"), 
        SchemeName = p.Field<string>("SchemeName"), 
        AgencyId = p.Field<Int64>("AgencyId"), 
        AgencyName = p.Field<string>("AgencyName"), 
        TADate = p.Field<DateTime>("TADate"), 
        AADate = p.Field<DateTime>("AADate"), 
        StatusDate = p.Field<DateTime>("StatusDate"), 
        ProgressDate = p.Field<DateTime>("ProgressDate"), 
        ReleaseDate = p.Field<DateTime>("ReleaseDate"), 
        AllocationDate = p.Field<DateTime>("AllocationDate"), 
        ExpDate = p.Field<DateTime>("ExpDate"), 
        TimeLimit = p.Field<Int64>("TimeLimit"), 
        TimeSpent = p.Field<Int64>("TimeSpent"), 
        TimeSpentPer = p.Field<double>("TimeSpentPer"), 
        TimeDiff = p.Field<double>("TimeDiff"), 
        EarthWorkP = p.Field<double>("EarthWorkP"), 
        EarthWorkC = p.Field<double>("EarthWorkC"), 
        SolingP = p.Field<double>("SolingP"), 
        SolingC = p.Field<double>("SolingC"), 
        WearingP = p.Field<double>("WearingP"), 
        WearingC = p.Field<double>("WearingC"), 
        RaisingP = p.Field<double>("RaisingP"), 
        RaisingC = p.Field<double>("RaisingC"), 
        StrengtheningP = p.Field<double>("StrengtheningP"), 
        StrengtheningC = p.Field<double>("StrengtheningC"), 
        PCLaidP = p.Field<double>("PCLaidP"), 
        PCLaidC = p.Field<double>("PCLaidC"), 
        ModifyDate = p.Field<DateTime>("ModifyDate"), 
        VillageName = t.Field<string>("VillageName"), 
       }).ToList(); 

、私は例外を取得しています「 『のSystem.DateTime』とタイプするDBNull.ValueのをキャストすることはできませんNULL可能タイプを使用してください。」 。この問題を解決し、すべてのデータ型のNULL値を処理するにはどうすればよいですか?

+0

をエラーはあなたがする必要があるすべてのものを言い、それはとてもフィード –

答えて

3

データベースフィールドがNULL可能である場合は、読み込み中のC#プロパティをnullableにする必要があります。

プロパティをNullable<DateTime>と宣言してください。これに便利な簡略表記があります:DateTime?。あなたの新しいオブジェクトを突出しているとき、あなたが使用することができます

public class Person 
{ 
    // DateOfBirth is NOT nullable - everyone has a date of birth... 
    public DateTime DateOfBirth { get; set; } 

    // DateOfDeath IS nullable - not everyone is dead yet... 
    public DateTime? DateOfDeath { get; set; } 
} 

次に、:

DateOfDeath = p.Field<DateTime?>("DateOfDeath"), 
+0

をスプーンする質問を必要としませんそれはReleaseDate = p.Field ( "ReleaseDate") – buffjape

+0

ええ - 私はそれを追加するために私の答えを編集していました:)私は十分に初めて十分に質問を読んでいない... –

+0

ありがとう。この "DateTime?"私の問題を解決しました。 –

関連する問題