我想做一个函数,它应该接受基于模型和模型属性类型的linq类表达式,并返回一个SQL字符串。
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天多,现在。我只是找不到解决方案。
1条答案
按热度按时间wfsdck301#
解决方案一点也不简单。而且您必须处理
Expression<Func<TModel, bool>> whereExpression
然后,您可以访问此表达式
ExpressionVisitor
(例如this answer)并生成SQL。或者,您也可以使用转义字符串、日期等来保存时间,安装linq2db后只需写入: