2013-03-05 116 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