2011-12-08 7 views
3

最新のEF/Linqを使用して動的クエリを生成し、汎用データセットを返す際に、ADO.net汎用クエリをEntity FrameworkまたはLinqに変換する方法

私の既存の環境は、ADO.netで動的に作成されたSQLクエリをデータセットとして返すことに大きく依存しています。パターンの使用: を - 目的に省略SQLおよびパラメータの詳細を -

SqlCommand cmd = new SqlCommand(); 
SqlDataAdapter da = new SqlDataAdapter(cmd); 
DataSet ds = new DataSet(); 
da.Fill(ds); 

これは、私たちはカスタムクエリを返し、データのグリッドとしてユーザに総称的にそれらを返すことができます。

私たちはO/Rマッピングではなく、読み取り専用クエリでこれを使用しています。これは、動的に作成されたSQLを実行して、さまざまな列、データ型などで異なるデータセットを返すことができます。

これはEF/Linqに移行するのが適切でしょうか、それとも古いテクノロジのように見えてもADO.netを使い続けるのが最善でしょうか?

答えて

2

がEF/LINQですか?

Rob Conery's Massiveのようなものを読み取り専用のクエリに使用することはどうですか?
簡単なこと:SQLクエリを実行し、動的オブジェクトのリストを返します。リンクから

引用:

var result = tbl.Query("SELECT * FROM Categories");

[...]

何を取り戻すことはExpandoObject <のIEnumerableです> - それは、可鍛性とエキサイティングだことを意味しています。それは、あなたがあなたのクエリで返すものの形をとり、それはプロパティなどを持ちます。

+0

ああ私の神!これはこれまで最高のものかもしれません。 JSONペイロードを2行のコードで返すことができます。うわー! 'var presult = Massive.DB.Current.Query(" SELECT * FROM myTable WHERE myField = @ 0 "、" SomeData "); ' Console.WriteLine(JsonConvert.SerializeObject(presult)); –

0

EntityFrameworkには任意のsqlを受け入れるメソッドCreateSourceQuery<T>がありますが、その結果はコンパイル時に認識され、ジェネリックパラメータで指定する必要があります。その結果、このアプローチはおそらくあなたのためにはうまくいかないでしょう。

linq-to-sqlまたはエンティティのフレームワークコンテキストに対して任意のsqlを指定できる動的拡張ライブラリがありますが、linqに動的SQLを渡すだけの場合は、それだけの価値はありません。

単純なデータセットに固執する。

関連する問題