2008-09-22 136 views
14

動態編寫LINQ查詢和Lambda表達式的最佳方式是什麼?動態LINQ和動態Lambda表達式?

我想到的應用程序,最終用戶可以設計業務邏輯規則,然後必須執行。

如果這是一個新手問題,我很抱歉,但最好能從經驗中獲得最佳實踐。

回答

1

我可以看到兩種方法可以動態生成lambda的。您可以嘗試Reflection.Emit直接生成IL(.Net字節碼),並將它們作爲lambda函數調用,或者您可以使用System.CodeDom和Microsoft.CSharp.CSharpCodeProvider從更高級別的結構生成代碼。你想要做什麼取決於你希望用戶如何輸入這些東西。如果你想讓用戶編寫C#,那麼你可以使用內置的編譯器。

動態生成Linq應該更容易。您應該能夠在運行時將LINQ查詢生成爲表達式樹,然後將它們傳遞給IQueryable來執行。我建議你看一下關於IQueryable的文檔以瞭解更多關於這個的內容。另一種方法是預先定義一些linq查詢,然後允許用戶將它們鏈接在一起。這應該是可行的,因爲任何Linq查詢都會返回可由下一個Linq查詢使用的IEnumerable。

2

另一種可能性是將腳本運行時集成到您的程序中,以便您的用戶可以在DSL中編寫業務邏輯。 IronPython將成爲候選人。

+0

完好的建議。我們這樣做是爲了配置工作流程,並且工作得非常好。 – 2010-02-19 23:28:20

+0

唯一的缺點是,你可能遇到全部/部分信任的問題,將阻止你的代碼在asp.net – viggity 2011-10-25 14:48:30

-1

我不明白你說的是什麼「最好的方式」。最好提供一個你想達到的簡單例子。編寫動態LINQ表達式並不困難,但棘手。

下面是動態LINQ表達式創建的示例:

How do I compose existing Linq Expressions

0

Lambda表達式可以通過System.Linq.Expressions命名空間被容易地創建。

0

System.Linq.Expressions是你需要的。我寫了一個很好的UI,可以讓用戶以表達式樹的形式動態地定義和構建查詢。然後,您可以將其交給Linq2SQL或您選擇的客戶端。