Problem: System.DateTime konvertieren



  • Hallo,

    ich habe eine DB-Abfrage:

    using (entity ctx = new entity())
                    {
                        DateTime? dt = null;
    
                        var query = (from b in ctx.tblbestelldaten
    				 // ...
    				 join le in ctx.tblliefereinzelheiten on be.besteinzelId equals le.bestelleinzelId into J
                                     from le in J.DefaultIfEmpty()
                                     join l in ctx.tbllieferdaten on le.lieferdatenId equals l.lieferdatenId into J2
                                     from l in J2.DefaultIfEmpty()
    
                                     select new Auftrag
                                     {
                                        // ...
                                        Lieferdatum = l != null ? (DateTime)l.Lieferdatum : dt,
    			            // ...
    				}.FirstOrDefault();
    		}
    

    Bei der Abfrage für das Lieferdatum erhalte ich die Fehlermeldung
    Der Typ "System.DateTime?" kann nicht implizit in "System.DateTime" konvertiert werden

    Ich stehe gerade auf dem Schlauch, wie ich das Problem lösen kann?
    Wo /wie muss ich die Konvertierung ändern?? 😕



  • Hallo,

    baue deine Zuweisung in ein einfaches if-Konstrukt um. Dann sollte es funktionieren.



  • Ist Lieferdatum denn ein Nullable<DataTime> (DateTime?) oder nur DateTime?

    Und wird denn dt noch etwas zugewiesen, denn sonst ist es ja immer null?



  • Huch komplett übersehen das die Zuweisung ja anders herum ist. - Dann ist der Fehler aussagekräftig genug denke ich.

    Lieferdatum = l != null ? (DateTime)l.Lieferdatum : dt,
    

    Ich vermute Lieferdatum ist hier eine DateTime-Property. dt jedoch ist ein Nullable<DateTime>. Die Zuweisung funktioniert so nicht, weil das zwei völlig verschiedene Typen sind. Du musst somit zum einem Prüfen, ob dt einen Wert besitzt und wenn ja diesen Zuweisen. Ein einfacher Cast von dt auf DateTime sollte hier ausreichen.



  • Ich verstehe es leider nicht 😕

    Code habe ich wie folgt geändert:

    DateTime dt = DateTime.MinValue;
    //...
    Lieferdatum = l != null ? (DateTime)l.Lieferdatum : (DateTime)dt,
    //..
    

    Nun kommt die Fehlermeldung: Ein Objekt muss IConvertible implementieren.

    Somit ist meine Konvertierung hier wohl falsch 😞



  • Sorry, habe zu schnell gepostet - so wie zuletzt von mit geschrieben funktioniert es!!
    Ich hatte zunächst noch DateTime? dt = DateTime.MinValue; stehen - damit geht es nicht.

    Danke Euch füre Eure Hilfe!!!


Log in to reply