2009-08-20 75 views
2

如果我想足夠糟糕,我可以添加額外的LINQ結構到LINQ到SQL(因爲我可以創建自己的LINQ提供程序)?例如,許多內置的LINQ操作符(XYZ.Any())直接轉換爲SQL(例如​​)。我可以擴展LINQ-to-SQL支持的操作符嗎?

如果我需要一個專門的構造,我甚至可以擴充這個集合,還是必須將它們烘焙到實際的LINQ-to-SQL提供程序中?

我該如何去添加一個新的操作符實現? C#擴展方法是否足夠執行該工作?

如果答案是肯定的,那麼有人會傾向於能夠通過LINQ-to-SQL生成的動態SQL替換很多(全部?)的sproc功能嗎?

回答

1

理論上,您可以將對任意表達式的支持添加到LINQ提供程序,但是Pavel是正確的,因爲LINQ to SQL不會作爲起點。我會考慮SubSonic或NHibernate,它們也有正在開發的LINQ提供程序。一旦提供者支持表達式,您只需在IQueryable<T>上構建等效的擴展方法 - 反映System.Linq.Queryable以獲取詳細信息。

這就是說,解析表達式樹絕對不是心靈的隱隱。除非您真的對AST理論感興趣,否則只需以「正常」的方式擴展OSS ORM可能會更容易。

+0

我很熟悉從AST解析/表達式樹結束的事情。我其實並沒有確切的需求,但大多隻是想知道未來的用法。這太糟糕了,因爲如果*所有內容都可以在LINQ中表達,它將會是一個非常酷的模型。現在當你提到SubSonic&NHibernate時,是因爲它們允許擴展,或者只是作爲另一個提供者來提供我需要的東西? – mckamey 2009-08-21 14:58:28

+0

我不知道任何SubSonic或NHibernate的內置表達式擴展性,但至少您可以選擇下載源代碼並添加您自己的。像在LINQ中表達_everything_一樣酷,有一些SQL結構不能很好地映射。這可能會隨着.NET 4中的擴展表達式支持而改變。 – dahlbyk 2009-08-21 16:29:10

1

不,LINQ to SQL是不可擴展的。你能做的最好的就是使用存儲過程。