2013-03-05 184 views
4

我已经研究了这个问题到死。每个人和他们的兄弟都想知道如何将int或decimal转换为字符串,但是我找不到任何与EF做相反的例子。LINQ to Entities字符串到十进制的一列

我的数据源在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。我真的不想ToList,因为它会从数据库中提取所有数据。这是绑定到一个Telerik KendoUI网格,该网格正在传递分页,排序和其他参数(注意它正在使用传入的请求将其转换为KendoUI的ToDataSourceResult,其中包含上述提及的分页,排序等数据。

+0

[问题与LINQ的转换INT为字符串的实体(可能重复http://stackoverflow.com/questions/1066760/problem-with-converting-int -to-string-in-linq-to-entities) – Win 2013-03-05 16:15:10

+0

Total_Amt是否需要在某段时间内是int或小数?你多久使用一次? – 2013-03-05 16:16:32

+2

@Win,这是一个否定的,因为我明确表示我想做相反的事情,将字符串转换为另一种格式,在这种情况下是十进制。 – 2013-03-05 16:22:17

回答

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试图找到例如数据库上的存储过程将引发异常。

+0

我想到了,问题在于它会从表中获取所有数据。这被绑定到一个Telerik Kendo UI网格,该网格正在传递排序,分组和分页数据,并且需要iQueryable。我将编辑这个问题来详细说明。 – 2013-03-05 16:29:35

+0

.AsQueryable():我没有看到一种方法来实现你的目标,就像你想要的一样......但无论如何,网格也会从数据库中获取数据 – 2013-03-05 22:28:11

0

您是否尝试过模型定义的功能?

<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