簡體   English   中英

LINQ to Entities字符串到十進制列

[英]LINQ to Entities string to decimal a column

我已經研究過這個問題了。 每個人和他們的兄弟想知道如何將int或decimal轉換為字符串,但我找不到任何與EF相反的例子。

我的數據源在數據庫中有一個order_amt列,其類型為varchar。 原因是源數據已加密。 解密器就是這樣做的。 我可以重寫它來解密到臨時表,然后將這些結果插入到正確類型的表中,但是當我們擴展應用程序時,現在和數據庫更新期間需要分配更多工作。

我希望能夠投射列,但我無法弄清楚如何使用Linq和EF。

public ActionResult Orders_Read([DataSourceRequest]DataSourceRequest request) {
var db = new Ecommerce_DecryptedEntities();
var orders = from s in db.Orders
                where s.Order_Complete == true
                select new { 
                    s.Order_Id, 
                    s.MySEL_Name, 
                    s.MySEL_EMail, 
                    s.MySEL_Bus_Name,
                    s.Total_Amt,
                    s.Order_Complete_DateTime
                };
DataSourceResult result = orders.ToDataSourceResult(request);
return Json(result, JsonRequestBehavior.AllowGet);
}

注意:結果需要是iQueryable。 我真的不想ToList這,因為它會從數據庫中提取所有數據。 這被綁定到Telerik KendoUI Grid,它正在傳遞分頁,排序和其他參數(注意它是使用傳入的請求轉換到KendoUI的ToDataSourceResult,該請求保存上面提到的分頁,排序等數據。

您必須首先將數據提取到List<Order> ,之后您可以投射任何您想要的內容。

var orders = 
    from s in
        ((from o in db.Orders
        where o.Order_Complete
        select o).ToList())
    select new { 
        s.Order_Id, 
        s.MySEL_Name, 
        s.MySEL_EMail, 
        s.MySEL_Bus_Name,
        Double.Parse(s.Total_Amt),
        s.Order_Complete_DateTime
    };

我認為EMS方式在你的代碼中看起來要好得多;)

var orders =
    db.Orders.Where(s => s.Order_Complete).ToList().Select(s => new { /*...*/ }

在轉換ToList()您已經獲得了數據對象並且可以對其進行修改,如果不這樣做,您可以使用Double.Parse因為EF試圖在數據庫中查找例如存儲過程並拋出異常。

你嘗試過模型定義的函數嗎?

<Function Name="ConvertToDecimal" ReturnType="Edm.Decimal">
     <Parameter Name="myStr" Type="Edm.String" />
     <DefiningExpression>
          CAST(myStr AS Edm.Decimal(12, 2))
     </DefiningExpression>
 </Function>

檢查此答案: 在組連接linq查詢中將字符串轉換為十進制

暫無
暫無

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

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