null-Wert bei Abfrage mit Linq



  • Guten Morgen!

    public class Auftrag
        {
            public Int32 Id { get; set; }
            public string Nummer { get; set; }
            public string Benennung { get; set; }
            public string Sonstiges { get; set; }
            public DateTime? Termin { get; set; }
    }
    
    var query = from a in ctx.tblauftrag
                                    where a.erledigt == false
                                    select new Auftrag
                                    {
            ID = a.id,
                                        Benennung = a.ben,
    
                                        //Termin = a.termin.HasValue ? a.termin : DateTime.Now,
                                        //Termin = a.termin ?? DateTime.Now,
    
    };
    

    Das Feld Termin enthält null-Werte. Aktuell stürzt die Abfrage immer ab "Objektverweis wurde nicht auf eine Objektinstanz festgelegt".
    Leider weiß ich nicht mehr weiter, wie ich dennoch die Abfage ausführen kann bzw. Werte zurückbekommen soll?
    Mit dem Stichwort "null coalescing operator" hab ich schon gesucht, aber leider hat mir dies nicht geholfen. 😞
    DB ist MySQL und das Feld Termin ist vom Typ DATE.

    Ich hoffe, von Euch kann mir jemand helfen! Danke!



  • ...where Termin.HasValue...



  • secondsun schrieb:

    ...where Termin.HasValue...

    Leider nützt das nichts 😞 Weiterhin dieselbe Fehlermeldung



  • das geht gar nicht!
    weder in datenbanken noch Linq.

    DukannschtkeineBaumstrukturbildenohneKnoten *hicks* 🤡



  • Sorry, ich hatte deinen auskommentierten Code komplett überflogen. Und da hast du ja schon das versucht, was ich dir vorgeschlagen habe.

    Was mir aber aufgefallen ist... Id != ID. Aber ich gehe mal davon aus, dass es ein Tippfehler war. Denn spätestens der Compiler hätte dich schon davon abgehalten den Code zu kompilieren.
    Dann finde ich soetwas hier extrem fies: a.erledigt == false. Schön, dass ich irgendwie sehen kann, dass es ein boolean ist aber ein !a.erledigt tut es auch.
    Hmm...Und ctx ist auch ungleich null?? Also du musst ja mal vorher irgendwo die DB Connection aufgemacht haben..



  • Die Abfrage mach ich nun direkt mit SQL.
    Jedoch habe ich nun das Problem, dass nicht alle Werte angezeigt werden:

    Die Klasse (etwas gekürzt)

    public class Auftrag
    {
            private Int32 _id;
            private String _nummer;
            private String _benennung;
            private Int32 _menge;
    
            public Int32 Id 
            {
                get
                {
                    return _id;
                }
                set
                {
                    _id = value;
                }
            }
            public string Nummer
            {
                get
                {
                    return _nummer;
                }
                set
                {
                    _nummer = value;
                }
            }
            public string Benennung
            {
                get
                {
                    return _benennung;
                }
                set
                {
                    _benennung = value;
                }
            }
            public string Menge
            {
                get
                {
                    return _menge;
                }
                set
                {
                    _menge = value;
                }
            }
    }
    

    Die DB-Abfrage

    ...
    using (...)
    string query = "SELECT id, nummer, benennung, menge " +
                   "FROM kalender " +
                   "WHERE erledigt = false " +
                   "ORDER BY termin";
    
    var result = ctx.ExecuteStoreQuery<Auftrag>(sQuery).ToList();
    DataTable tbl = IEnumerableToDataTable.ToDataTable(result);
    return tbl;
    ...
    

    Leider bleibt das Feld Menge immer leer bzw. 0?
    An was kann dies liegen?



  • Menge ist string. Wenn in deiner DB Menge aber int oder so ist, dann geht es natürlich nicht


Anmelden zum Antworten