//my question is here
public static Query Where<TElement>(this Query query, Func<TElement, bool> predicate)
{
query.sql +=" FROM Table WHERE "+ predicate+";";
return query;
}
//Query class
public class Query
{
public Query(){}
public Query(string sql){this.sql = sql;}
public string sql { set; get; }
}
//User class
public class User
{
public int ID { get; set; }
public string Name { get; set; }
}
//example:
User user = new User() { ID=1,Name="test"};
Query query = new Query();
query = query.Where<User>(u=>u.ID==user.ID);
Console.WriteLine(query.sql);
运行后结果为:
FROM Table WHERE System.Func'2[DAL.User,System.Boolean]';
但我需要的是:
FROM Table WHERE ID=1;
有人可以帮助我吗?
最佳答案
如果您想了解 Linq to Sql 如何构建 SQL 查询,您的第一步将是了解 Expression Trees .
下一步将是熟悉 ExpressionVisitor这将有助于您如何访问表达式树中的每个部分。
从那里阅读博客系列"LINQ: Building an IQueryable provider series"它介绍了如何将表达式树解析为 sql。
帖子"Where and reusable Expression tree visitor"将帮助您了解如何解析您的谓词。
现在,因为您将不再使用IQueryable<T>.Where()
但只是Expression<Func<T, bool>>
这些帖子中的所有内容并非完全相关,但对于如何将谓词表达式解析为有效的 sql where 子句来说应该是一个良好的开始。
希望这可以帮助您入门!
关于c# - 关于 Func<TElement, bool> 谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208351/