ユーザーが最も単純なselectステートメント以外のものを入力する場合、これを行うのは非常に困難です。あなたのプロジェクトがSQL用の完全なパーサーを書くのは法外な費用がかかると思いますが、それは本質的にあなたが話していることです。
私たちが持っている自家製のORMの場合、基本的に事前定義されたSQLクエリをで使用できるものに変換するクラスがありますDataTable.Select
が、where句はSqlParametersから生成されます。
考えられる解決策
おそらく、次のプロジェクトを組み合わせて、自分が求めているものに近づけることができます。
Linqer(SQLからLINQへのコンバーター)、次にLINQからDataSetへ
私自身はLinqerを使用していません。
他のいくつかの考え
あなたはこれについて少し考えてきたと思いますが、これを行うのが難しいということは、少しズームアウトした方が良い方法があることを意味しているのかもしれません。厳密に言えば、不明なクエリを使用してキャッシュにクエリを実行するということは、キャッシュにすべての可能なデータを入力するか、クエリの送信時にそのデータを呼び出せるようにする必要があることを意味します。定義上、これは、ソースを直接クエリするよりも優れたパフォーマンスを提供することはできません。ただし、キャッシュが古くなる前に十分にキャッシュをヒットして、それを価値のあるものにする場合を除きます。アドホックレポートシステム(私の仮定)の場合、それが事実であると疑う傾向があります。また、エッジケース以外ではデータベースエンジンを上回らないのではないかと心配しています。
@JoshCは、Sqliteの可能性についても言及しています。また、SQL Server 2012 LocalDBもありますが、これらは確かに.netデータセットではありません。