2016-10-20 1 views
1

Ich habe seltsames Verhalten in einigem C# Code, der eine LINQ-Abfrage verwendet, einige Daten in einer einfachen Datensatz Tabelle zuzugreifen:LINQ DataRowExtensions.Field <int> muss <decimal> sein?

var rowConfig = from row in dsConfig.Tables[0].AsEnumerable() 
          where row.Field<string>("SERVICE").ToUpper().Contains(trackedServType) 
          select row; 

       seqMin = Convert.ToInt32(rowConfig.FirstOrDefault().Field<decimal>("ROYAL_MAIL_SEQ_MIN")); 

Wenn ich FirstOrDefault().Field<int> schreibe ich eine InvalidCastException zur Laufzeit erhalten,

Aus irgendeinem Grunde es muss decimal sein.

"SERVICE" ist ein numeric Typ in einer SQL-Datenbank T

+0

Warum denkst du ist es seltsam? Der Typ "T", den Sie an die Methode "Field ()' übergeben, muss mit dem Datentyp ['DataColumn.DataType'] (https://msdn.microsoft.com/en-us/library/system.data.datacolumn.datatype (v = vs.110) .aspx) Eigenschaft –

Antwort

1

Numeric Der Datentyp in SQL Server konvertiert in decimal in .net. Sie können die vollständige Konvertierungsliste here sehen.

Sie erhalten diesen Fehler, da keine implizite Konvertierung zwischen Dezimal und jedem anderen numerischen Typ in C# vorhanden ist. Sie können die Liste der implicit conversions here und die Liste der explicit conversions here anzeigen.

+0

Großartig, das beantwortete meine Frage perfekt, konnte nichts finden. Feld auf MSDN – Rob

+0

@Rob froh zu helfen. Bitte achten Sie darauf, Antworten und Fragen, die Sie hilfreich oder gut finden, zu verbessern (und im Falle von Antworten auf Ihre eigenen Fragen, markieren Sie die richtige Antwort als richtig). – pquest

Verwandte Themen