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,其中包含上面提到的分页、排序等数据)。

LINQ到实体字符串以十进制表示列

您必须首先获得数据到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查询中将字符串转换为十进制