LINQ到实体字符串以十进制表示列
本文关键字:十进制 表示 字符串 实体 LINQ | 更新日期: 2023-09-27 18:02:27
我对这个问题研究得很透彻。每个人和他们的兄弟都想知道如何将int或decimal转换为string,但我找不到任何与EF相反的示例。
我的数据源在数据库中有一个varchar类型的order total_amt列。原因是源数据被加密了。解密器在适当的位置进行解密。我可以重写它来解密到一个临时表,然后将这些结果插入到一个正确类型的表中,但这将需要分配更多的工作,无论是现在还是在DB更新期间,我们扩展应用程序。
我希望能够转换列,但我不知道如何用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);
}
注意:结果必须是可查询的。我真的不想列出这个,因为这将从数据库中提取所有数据。这被绑定到一个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 { /*...*/ }
在cast 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>
检查这个答案:在group join linq查询中将字符串转换为十进制