![](/img/trans.png)
[英]Linq to entities / EF : join to tables on a decimal and a string field
[英]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.