Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

Linq Fehler: The cast to value type System.Int32 failed because the materialized value is null.

13.01.2019 (👁568)

 Fehlermeldung bei Linq Abfrage mit Null

 

The cast to value type System.Int32 failed because the materialized value is null.
Either the result type's generic parameter or the query must use a nullable type

 

Lösung in Linq

Man  muss SQL Daten Felder, welche null sein können, in der Ausgabe mit (int?) umwandeln

IDMaschinengruppe= (int?) linked_Maschinengruppen.IDMaschinenGruppe ,

 

 

var data = (from tbl in db.tblBase_Mitarbeiter

 

            join schichtGruppe in db.tblBase_Schichtgruppen on tbl.IDSchichtgruppe equals schichtGruppe.IDSchichtgruppe into joined_Mitarbeiter_Schichtruppen

            from linked_Schichtgruppen in joined_Mitarbeiter_Schichtruppen.DefaultIfEmpty()

 

            join maschine in db.tblBase_Maschinen on tbl.IDMaschine equals maschine.IDMaschine into joined_Mitarbeiter_Maschinen

            from linked_Maschinen in joined_Mitarbeiter_Maschinen.DefaultIfEmpty()

 

            join maschinenGruppen in db.tblBase_Maschinengruppen on linked_Maschinen.IDMaschine equals maschinenGruppen.IDMaschinenGruppe into joined_Maschinen_Maschinengruppen

            from linked_Maschinengruppen in joined_Maschinen_Maschinengruppen.DefaultIfEmpty()

 

 

            orderby tbl.Nachname ascending

            select new

            {

                IDMitarbeiter = tbl.IDMitarbeiter ,

                Nachname = tbl.Nachname,

 

                IDMaschine = tbl.IDMaschine,

                Maschine = linked_Maschinen.Maschine,

                IDMaschinengruppe= (int?) linked_Maschinengruppen.IDMaschinenGruppe ,

                IDSchichtgruppe=tbl.IDSchichtgruppe,

                Schichtgruppe = linked_Schichtgruppen.Schichtgruppe

 

            }

            )

            .Take(1000);

 

 

 

 

 

 

 

Final die komplette Lade-Methode zum füllen eines Datengrids in WPF

//----------------< load_DataGrid() >----------------

ctlDataGrid.Items.Clear();

 

try

{

    //----< Daten laden >----

    //< get_Data >

    //#TODO: hier den Tag berechnen und die Schicht... anhand der Tag-Name vom Sourcepanel

 

    var data = (from tbl in db.tblBase_Mitarbeiter

 

                join schichtGruppe in db.tblBase_Schichtgruppen on tbl.IDSchichtgruppe equals schichtGruppe.IDSchichtgruppe into joined_Mitarbeiter_Schichtruppen

                from linked_Schichtgruppen in joined_Mitarbeiter_Schichtruppen.DefaultIfEmpty()

 

                join maschine in db.tblBase_Maschinen on tbl.IDMaschine equals maschine.IDMaschine into joined_Mitarbeiter_Maschinen

                from linked_Maschinen in joined_Mitarbeiter_Maschinen.DefaultIfEmpty()

 

                join maschinenGruppen in db.tblBase_Maschinengruppen on linked_Maschinen.IDMaschine equals maschinenGruppen.IDMaschinenGruppe into joined_Maschinen_Maschinengruppen

                from linked_Maschinengruppen in joined_Maschinen_Maschinengruppen.DefaultIfEmpty()

 

 

                orderby tbl.Nachname ascending

                select new

                {

                    IDMitarbeiter = tbl.IDMitarbeiter ,

                    Nachname = tbl.Nachname,

 

                    IDMaschine = tbl.IDMaschine,

                    Maschine = linked_Maschinen.Maschine,

                    IDMaschinengruppe= (int?) linked_Maschinengruppen.IDMaschinenGruppe ,

                    IDSchichtgruppe=tbl.IDSchichtgruppe,

                    Schichtgruppe = linked_Schichtgruppen.Schichtgruppe

 

                }

                )

                .Take(1000);

 

    //</ get_Data >

 

    //--< @Loop: Rows >--

    foreach (var row in data)

    {

        if (row.IDMaschine == _IDMaschine)

        {

            ctlDataGrid.Items.Add(row);

        }

        else if (row.IDMaschinengruppe == _IDMaschinengruppe)

        {

            ctlDataGrid.Items.Add(row);

        }

    }

    //--</ @Loop: Rows >--

 

    //----</ Daten laden >----

}

catch (Exception ex)

{

    MessageBox.Show(ex.Message);

}

//----------------</ load_DataGrid() >----------------