2017-09-06 7 views
0

私は関数述語からsql where節を構築しようとしています。あなたがそうすることができるC#関数述語からSQL where節を構築することは可能ですか?

public IEnumerable<TDbEntity> Query(Func<TDbEntity, bool> predicate) 
{ 
// TODO: to build whereCondText from predicate 
var whereCondText = ""; 
var sql = "SELECT * FROM TABLE WHERE " + whereCondText; 
return DB.Connection.Query<TDbEntity>(sql); 
} 
+0

私はdapperを使用しています。 – Tushar

+0

https://github.com/tmsmith/Dapper-Extensions/ https://github.com/tmsmith/Dapper-Extensions/wiki/Predicatesは役に立ちますか? – mjwills

+0

あなたがしたいことは、ORMが行うこととまったく同じですが、代理人の代わりに、「式」から行います。あなたの質問に答えるには:はい、これは 'Expression'で行うことができますが、それは容易ではありません。 ORMがこれを行うことができるのであれば、なぜこれをやりたいのですか? – CodingYoshi

答えて

0

が、述語はExpression<Func<TDbEntity, bool>>の形でなければならないであろう:私は何を達成しようとしていることは、次のようになります。これは、コードのILを発行するのではなく、コードのAST表現を作成するようにコンパイラに指示します。次に、ExpressionVisitorを使用してツリーを移動し、述部を作成することができます。

これは簡単な作業ではありません。おそらく、Entity FrameworkまたはDraperまたはnHibernateを使用する方がよいでしょう。簡単な表現のために、まともな仕事をすることができるかもしれません。

+0

いくつかのコード例を共有できますか? – Tushar

+0

実際には、私は 'ExpressionVisitor'を使用しましたが、式変換からSQLへの変換を実行するのは簡単な作業ではありません。クラスをSQLのテーブルと列にマッピングする方法によって異なります。 –

+0

これはこれに関する標準的なドキュメントです:https://msdn.microsoft.com/en-us/library/bb882521(v=vs.90).aspx –

関連する問題