c# - 关于 Func<TElement, bool> 谓词

标签 c# linq-to-sql

//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/

相关文章:

c# - 使用 InMemoryDatabase 和 Identity 列进行测试,如何处理?

c# - 有效拆分以分隔符分隔的消息

c# - EF、AddRange、Collection 被修改;枚举操作可能无法执行

C# 反序列化 JSON html 字符串

entity-framework - linq to sql类和 Entity Framework 有什么区别

database - CREATE DATABASE 的 Linq to Sql ExecuteCommand

c# - 生成licenses.licx

c# - 如何确定 LINQ 查询是 LINQ to SQL 还是 LINQ to Objects?

c# - LINQ options.loadwith问题

linq-to-sql - Linq 2 SQL 分组问题