Lambda表达式和存储过程

Jas*_*ers 4 c# database lambda

我正在尝试模仿我的ADO.NET DAL方法的LINQ Where扩展方法.

基本上,我的目标是有一个我可以打电话的方法.如:

Product p = Dal.GetProduct(x => x.ProductId == 32);
Product p2 = Dal.GetProduct(x => x.ProductName.Contains("Soap"));
Run Code Online (Sandbox Code Playgroud)

然后,我想剖析那些谓词并将过滤器选项发送到ADO.NET存储过程调用中的参数.

任何评论都非常感谢.

And*_*bel 9

正如@Daniel指出的那样,这远非简单.解决方案大纲是让 GetProduct类型参数Expression<Func<Product, bool>>.然后,您必须遍历此表达式的解析树,为已知函数生成正确的SQL,并决定如何处理未知函数.基本上有两种选择:

  1. 抛出错误(如linq-to-sql所做的那样).
  2. 在翻译中跳过它,然后将其应用于返回的结果.如果大量数据只是被过滤掉,那么这对性能的影响当然是巨大的.

这样做会很有趣 - 但是在现实世界中,当已经有linq2sql,linq2entities和linq2NHibernate完成这项任务时,我几乎找不到一种方法可以证明它是正确的.