如果我想要足够严重,我可以在LINQ-to-SQL中添加额外的LINQ构造(如果创建自己的LINQ提供程序,我可以这样做)吗?例如,许多内置LINQ运算符(XYZ.Any()
)直接转换为SQL(例如IF EXISTS(XYZ)
)。
如果我需要一个专门的构造,我是否能够扩充该集合,还是必须将其融入到实际的LINQ-to-SQL提供程序中?
我如何添加新的运营商实施? C#扩展方法是否足以完成这项工作?
如果答案是肯定的,那么有人会倾向于通过LINQ-to-SQL生成的动态SQL替换很多(全部?)sproc功能吗?
答案 0 :(得分:1)
不,LINQ to SQL不可扩展。您可以做的最好是使用存储过程。
答案 1 :(得分:1)
理论上,您可以向LINQ提供程序添加对任意表达式的支持,但Pavel对LINQ to SQL不起作为起点是正确的。我会研究SubSonic或NHibernate,它们也正在开发LINQ提供程序。一旦提供者支持表达式,您只需要在IQueryable<T>
上构建一个等效的扩展方法 - 反映System.Linq.Queryable
以获取详细信息。
那就是说,解析表达树绝对不适合胆小的人。除非你真的对AST理论感兴趣,否则以“正常”的方式扩展OSS ORM可能会更容易。