【问题标题】:LINQ to Entities string to decimal a columnLINQ to Entities 字符串对列进行十进制
【发布时间】:2013-02-20 03:23:50
【问题描述】:

我已经研究了这个问题。每个人和他们的兄弟都想知道如何将 int 或 decimal 转换为 string,但我找不到任何使用 EF 做相反的例子。

我的数据源在数据库中有一个 varchar 类型的 order total_amt 列。原因是源数据已加密。解密器就地这样做。我可以重写它以解密到临时表,然后将这些结果插入到正确类型的表中,但这需要分配更多的工作,无论是现在还是在我们扩展应用程序的数据库更新期间。

我很想能够投射列,但我不知道如何使用 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。我真的不想列出这个,因为这会从数据库中提取所有数据。这被绑定到 Telerik KendoUI Grid,它正在传递分页、排序和其他参数(请注意,它使用传入的请求转换为 KendoUI 的 ToDataSourceResult,其中包含上述分页、排序等数据。

【问题讨论】:

  • Total_Amt 在一定时间内是否需要为整数或小数?您使用它的频率如何?
  • @Win,这是否定的,正如我明确表示我想做相反的事情,将字符串转换为另一种格式,在这种情况下为十进制。
  • @DJBurb。我只需要它是结果订单变量中的小数,所以理想情况下我想做类似“cast(s.Total_Amt as decimal)”
  • @DavidL.Sargent 我错过了阅读它。抱歉!

标签: c# asp.net linq entity-framework


【解决方案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。我将编辑问题以详细说明。
  • .AsQueryable() :p 我看不到一种方法可以像你想要的那样归档你的目标......但无论如何,网格也会从数据库中获取数据
【解决方案2】:

您尝试过模型定义的函数吗?

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

检查这个答案:Convert string to decimal in group join linq query

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多