[英]Linq like predicate to sql string
I want to make a function which should accept linq like expression based on model and property types of models and return a SQL string.
public class MyModel
{
public int Year { get; set; }
public string UserName { get; set; }
}
public static class MyControlClass
{
public static string BuildSQL<TModel>(Func<TModel, bool> whereExpression)
{
return $"SELECT * FROM {nameof(TModel)} WHERE {whereExpression}";
}
}
public main(){
string sqlQuery = MyControlClass.BuildSQL<MyModel>(m => m.Year == 2021 && UserName == "Tester");
//What I wish sqlQuery to be
//SELECT * FROM MyModel WHERE Year = 2021 AND UserName = "Tester"
}
任何想法如何做到這一點? 我知道 POCO 和其他 ORM 庫,我已經嘗試和搜索了超過 3 天。 我只是找不到解決方案。
解決方案一點也不簡單。 你必須處理Expression<Func<TModel, bool>> whereExpression
然后你可以訪問這個表達式ExpressionVisitor
例如這個答案並生成 SQL。
或者您可以使用 escaping 字符串、日期等來節省您的時間,安裝linq2db並編寫:
public class MyModel
{
public int Year { get; set; }
public string UserName { get; set; }
}
public static void Main()
{
// create options builder
var builder = new LinqToDbConnectionOptionsBuilder();
// configure connection string
var options = builder.UseSqlServer(connectionString);
using var db = new DataConnection(options);
var query = db.GetTable<MyModel>().Where(m => m.Year == 2021 && m.UserName == "Tester");
// will generate SQL
var sql = query.InlineParameters().ToString();
// will return list of items
var items = query.ToList();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.