2013-03-05 4 views
4

Я изучил этот вопрос до смерти. Каждый и их брат хотят знать, как преобразовать int или decimal в строку, но я не могу найти какой-либо пример противоположного с EF.LINQ to Entities строка до десятичной строки

Мой источник данных имеет порядок total_amt column в базе данных, тип varchar. Причина в том, что исходные данные были зашифрованы. Дешифратор делает это на месте. Я мог бы переписать это для дешифрования в временную таблицу, а затем вставить эти результаты в правильно типизированную таблицу, но для этого потребуется выделить больше работы, как сейчас, так и во время обновлений БД при расширении приложения.

Мне бы хотелось, чтобы я мог использовать столбцы, но я не могу понять, как это сделать с 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, которая передается в поисковых вызовах, сортировке и других параметрах (обратите внимание, что она передается в ToDataSourceResult от KendoUI, используя переданный в запросе, который содержит вышеупомянутые данные поискового вызова, сортировки и т. Д.

+0

возможно дубликат [Проблема с преобразования Int в строку в Linq к объектам] (http://stackoverflow.com/questions/1066760/problem-with-converting-int -to-string-in-linq-to-entities) – Win

+0

Должен ли Total_Amt быть int или десятичным числом в течение определенного времени? Как часто вы его используете? –

+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() Y ou имеют объект данных на основе и могут его модифицировать, если вы не можете использовать Double.Parse, потому что EF пытается найти, например. хранимую процедуру в базе данных и выдаст исключение.

+0

Я думал об этом, проблема в том, что он получит все данные из таблицы. Это связано с сеткой пользовательского интерфейса Telerik Kendo, которая передает данные сортировки, группировки и подкачки и требует iQueryable. Я отредактирую вопрос, чтобы уточнить. –

+0

.AsQueryable(): p я не вижу способ архивировать вашу цель, как вы этого хотите ... но в любом случае сетка также получит данные из БД –

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