Announcement

Collapse
No announcement yet.

Die Umwandlung in 'Decimal' wird in 'LINQ to Entities'-Abfragen nicht unterstützt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Die Umwandlung in 'Decimal' wird in 'LINQ to Entities'-Abfragen nicht unterstützt

    Hallo,

    ich bin gerade etwas am Verzweifeln ...
    Nachdem ich gelesen habe, dass man Geldbeträge aufgrund der Rundungsfehler als Decimal deklarieren soll, hab ich nun an einigen Tabellen von Double auf Decimal umgestellt.

    Wenn ich nun das Programm aufrufe und einen Datensatz abrufen möchte, erhalte ich obige Fehlermeldung

    Muss ich nun meine ganzen Tabellen wieder auf Double ändern??
    Hier mal die Abfrage. Alle Felder, die auch in der Datenbank Decimal sind, habe ich nochmals extra versucht zu casten - leider ohne Erfolg

    Code:
    			var qry = from ez in ctx.tblEinzelheiten
                                  join l in ctx.tblLiefdat on ez.Id
                                  equals l.fk_einzelheitenId
                                  where ez.fk_EKId == iBestellEKId
                                  orderby ez.Id
                                  orderby ez.termin
                                  select new Termindaten
                                  {
                                      Bauteil = (int)ez.bauteil,
                                      Nummer = ez.Nummer,
                                      Name = ez.Bezeichnung,
                                      Menge = ez.Menge,
                                      PreisVPE = (decimal)ez.preisVPE,
                                      Einzelpreis = (decimal)ez.einzelpreis,
                                      Lieferant = ez.LieferantName,
                                      BestellDatum = ez.bestellDatum, 
                                  };
    							  
    			return IEnumerableToDataTable.ToDataTable(qry.ToList());
    Oder liegt der Fehler an .ToDataTable()
    Code:
    public static DataTable ToDataTable<T>(this IEnumerable<T> collection)
            {
                DataTable dt = new DataTable("DataTable");
                Type t = typeof(T);
                PropertyInfo[] pia = t.GetProperties();
    
                //Inspect the properties and create the columns in the DataTable
                foreach (PropertyInfo pi in pia)
                {
                    Type ColumnType = pi.PropertyType;
                    if ((ColumnType.IsGenericType))
                    {
                        ColumnType = ColumnType.GetGenericArguments()[0];
                    }
                    dt.Columns.Add(pi.Name, ColumnType);
                }
    
                //Populate the data table
                foreach (T item in collection)
                {
                    DataRow dr = dt.NewRow();
                    dr.BeginEdit();
                    foreach (PropertyInfo pi in pia)
                    {
                        if (pi.GetValue(item, null) != null)
                        {
                            dr[pi.Name] = pi.GetValue(item, null);
                        }
                    }
                    dr.EndEdit();
                    dt.Rows.Add(dr);
                }
                return dt;
            }
    }

  • #2
    ToDataTable enthält keinen LINQ2Entities Code sollten wir also ausschließen können. Beim Debuggen hängt die Applikation vermutlich an der Zeile aber nur weil die Query ja erst beim ToList() ausgeführt wird.

    Testweise solltest du deine Query mal ez zurückliefern lassen (also einfach ein select ez; anstatt ein Termindaten Object)
    Wenn das geht zeig uns die Definition der Termindaten Klasse. Wenn es nicht geht die Definition der tblEinzelheiten Tabelle. Eins von beidem wird irgendwo eine Typumwandlung erzwingen.

    Comment


    • #3
      Hallo, vielen Dank für den Hinweis zum Posten der Klassen und der Tabellen! Daraufhin habe ich selbst nochmals alles überprüft und bemerkt, dass ein Wert noch nicht als decimal deklariert war! Nur hat mich die Fehlermeldung so verwirrt, dass ich dachte, es wäre mit Linq nicht möglich. :-(
      Somit läuft jetzt alles :-) Dankeschön!

      Comment

      Working...
      X