4

私はこの質問を死ぬまで研究しました。int または decimal を string に変換する方法を誰もが知りたがっていますが、EF で逆のことを行う例は見つかりません。

私のデータ ソースには、データベース内に varchar 型の order total_amt 列があります。理由は、ソース データが暗号化されているためです。デクリプターはその場でそうします。これを書き直して一時テーブルに復号化し、それらの結果を適切に型指定されたテーブルに挿入することもできますが、現在およびアプリを拡張する際の 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 である必要があります。DBからすべてのデータを取得するため、これをToListしたくありません。これは、ページング、ソート、およびその他のパラメーターを渡す Telerik KendoUI Grid にバインドされています (上記のページング、ソートなどのデータを保持する、渡されたリクエストを使用して KendoUI の ToDataSourceResult にキャストされていることに注意してください)。

4

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 { /*...*/ }

キャスト後、データオブジェクトベースを取得し、それを変更できます.EFがデータベース上のストアドプロシージャなどを見つけようとして例外をスローするため、ToList()使用できない場合は変更できます.Double.Parse

于 2013-03-05T16:20:55.987 に答える
0

モデル定義関数を試しましたか?

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

この回答を確認してください:グループ結合 linq クエリで文字列を 10 進数に変換する

于 2013-03-05T21:12:39.220 に答える