[英]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.