簡體   English   中英

數值不適合System.Decimal

[英]Numeric value does not fit in a System.Decimal

我正在使用帶有實體框架的Postgres數據庫。

在我的數據庫中,有一個表,該表具有列price (numeric)和類似12314.0464314894136514658489431486146548

當我使用LINQ查詢獲取數據時,它將引發錯誤:

mscorlib.dll中發生類型'System.OverflowException'的異常,但未在用戶代碼中處理

附加信息:數值不適合System.Decimal

在我的模型類中, price屬性的數據類型為decimal(19,4)

我一直認為數據庫表中的值具有較高的精度,而我的模型屬性具有較低的精度,

所以我的問題是:有什么方法可以從數據庫表中獲取具有截斷的/四舍五入的值的數據,這將適合我的模型屬性嗎?

注意:我必須對C#代碼做的所有操作,不要對數據庫進行任何更改。

提前致謝

您可以在數據庫級別四舍五入“價格”字段值。 嘗試這個

var myRecords = model.Database
.SqlQuery<MyRecord>("select ..., cast(Price as numeric(19,4)) from mytable");

如果您以文本形式接收值,並且需要四位小數,則可以這樣進行轉換:

decimal d = 0;
d = Convert.ToDecimal(Math.Round(Convert.ToDouble("12314.0464314894136514658489431486146548"), 4));

// d -> 12314.0464

.edmx文件中添加Select查詢,解決了我的精度問題。

導航到<EntitySet>標記,然后添加選擇查詢。

<edmx:StorageModels>
    <Schema>
        <EntityContainer>
            <EntitySet Name="books" EntityType="Self.books" store:Type="Tables" store:Schema="public">
                <DefiningQuery>SELECT "books"."name", (("books"."price")::double precision)::numeric FROM "public"."books" AS "books"</DefiningQuery>
            </EntitySet>
        </EntityContainer>
    </Schema>
</edmx:StorageModels>

現在,當我使用以下查詢選擇該列時,它返回的值將正確適合c#的十進制數據類型,因此無需在數據庫中進行任何更改。

var result = context.books.Where(x => x.name == "My Book").ToList();

嘗試這個:

select round(price,4) from books

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM