LINQ to Entities 字符串转换为十进制数列

4
我已经对这个问题进行了大量的研究。每个人都想知道如何将整数或小数转换为字符串,但我找不到使用EF进行相反操作的示例。
我的数据源在数据库中有一个total_amt列,其类型为varchar。原因是源数据被加密。解密器会直接在原地进行解密。我可以重写它以将其解密到一个临时表中,然后将这些结果插入到正确类型的表中,但这需要更多的工作,现在和在扩展应用程序期间的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);
}

注意:结果需要是iQueryable类型。我真的不想将其转换为ToList,因为这样会从数据库中拉取所有数据。这将被绑定到Telerik KendoUI网格,该网格将传递分页、排序和其他参数(请注意,它被转换为KendoUI的ToDataSourceResult,使用传递的请求来保存上述分页、排序等数据)。


可能是重复的问题:在Linq to entities中将int转换为string的问题 - Win
2
@Win,回答是否定的,因为我明确表示我想要做相反的事情,即将一个字符串转换为另一种格式,在这种情况下是十进制。 - David L. Sargent
@DJBurb。我只需要在结果订单变量中得到一个十进制数,所以理想情况下我想做类似于“将s.Total_Amt转换为十进制数”的操作。 - David L. Sargent
@DavidL.Sargent 我误读了,抱歉! - Win
@Win 对不起,我重新阅读了我的评论,意识到它听起来有点傲慢,我完全不是那个意思。非常感谢您的帮助。 - David L. Sargent
显示剩余2条评论
2个回答

1
你需要先将数据获取到一个 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会尝试在数据库上查找存储过程并抛出异常。

我考虑过这个问题,但它会获取表中的所有数据。这是绑定到Telerik Kendo UI网格的,该网格传递排序、分组和分页数据,并需要iQueryable。我将编辑问题以阐明。 - David L. Sargent
.AsQueryable():我不认为有办法可以像你想的那样实现你的目标...但无论如何,网格也将从数据库获取数据。 - Jan P.

0
你尝试过模型定义的函数吗?
<Function Name="ConvertToDecimal" ReturnType="Edm.Decimal">
     <Parameter Name="myStr" Type="Edm.String" />
     <DefiningExpression>
          CAST(myStr AS Edm.Decimal(12, 2))
     </DefiningExpression>
 </Function>

请查看此答案:在Linq查询中将字符串转换为十进制数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接