我正在尝试模仿LINQ Where扩展方法来编写我的ADO.NET DAL方法。
基本上,我的目标是拥有一个可以调用的单一方法。例如:
Product p = Dal.GetProduct(x => x.ProductId == 32);
Product p2 = Dal.GetProduct(x => x.ProductName.Contains("Soap"));
我希望您能够剖析这些谓词,并将过滤选项发送到ADO.NET存储过程调用中的参数中。
非常感谢您的任何评论。
我正在尝试模仿LINQ Where扩展方法来编写我的ADO.NET DAL方法。
基本上,我的目标是拥有一个可以调用的单一方法。例如:
Product p = Dal.GetProduct(x => x.ProductId == 32);
Product p2 = Dal.GetProduct(x => x.ProductName.Contains("Soap"));
我希望您能够剖析这些谓词,并将过滤选项发送到ADO.NET存储过程调用中的参数中。
非常感谢您的任何评论。
GetProduct 接受一个类型为 Expression<Func<Product, bool>> 的参数。然后您必须遍历此表达式的解析树,生成已知函数的正确 SQL,并决定如何处理未知函数。基本上有两个选项:
这将是一个有趣的练习 - 但当已经有 linq2sql、linq2entities 和 linq2NHibernate 完成工作时,我几乎无法想象在现实世界中证明其存在的方法。
ExpressionVisitor类(它是.NET 4中的新功能,但您可以在LinqKit中找到3.5的实现),并覆盖您想要分析每个节点的方法。
您可能还对以下链接感兴趣: