2017-09-06 64 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

我正在使用小巧玲瓏。 – 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>>形式。這告訴編譯器爲您的代碼構建AST表示,而不是爲代碼發送IL。然後,您可以使用ExpressionVisitor來遍歷樹並創建謂詞。

這不是一項簡單的任務。你可能更適合使用Entity Framework或Draper或nHibernate。爲了簡單表達,你可能會做一份體面的工作。

+0

你能分享一些代碼示例嗎? – Tushar

+0

不是真的,我已經使用了'ExpressionVisitor',但是完成表達式樹到SQL轉換並不是一項簡單的任務,它取決於您如何將類映射到SQL表和列......再次,ORM對您來說可能更好 –

+0

這將是這個標準的文檔:https://msdn.microsoft.com/en-us/library/bb882521(v=vs.90).aspx –