使用ReSharper,我偶爾會爲LINQ操作導入命名空間的快速修復建議。因此,考慮下面的代碼在一個全新的類:System.Linq.Dynamic和System.Linq之間的區別?
linqToSqlDataContext.Customers.Count();
我得到一個速戰速決的下拉如下:
我應該選擇哪一個,和之間有什麼區別他們?
使用ReSharper,我偶爾會爲LINQ操作導入命名空間的快速修復建議。因此,考慮下面的代碼在一個全新的類:System.Linq.Dynamic和System.Linq之間的區別?
linqToSqlDataContext.Customers.Count();
我得到一個速戰速決的下拉如下:
我應該選擇哪一個,和之間有什麼區別他們?
System.Linq.Dynamic是Dynamic LINQ的命名空間。除非您已經添加了對Dynamic LINQ程序集的引用,否則您不應該將其看作是一個選項。你有沒有這樣做? 你應該這樣做,如果你真的想要使用動態LINQ。
動態LINQ允許您將查詢表示爲文本 - 有點像DataTable.Select
。我個人從未發現它的用途,但你可能想要它。這應該是一個慎重的選擇。大多數情況下,你可以使用靜態類型的LINQ to Objects。
編輯:根據OP的評論,動態LINQ的代碼可能已直接添加到項目中,而不是作爲單獨的程序集引用。即使你做實際上想要使用動態LINQ,我強烈建議將它保存在一個單獨的程序集中,而不是將它與自己的代碼混合。
動態LINQ是一個non-typesafe version of LINQ.這需要字符串而不是lambda來生成查詢。
除非您需要任何專家功能,否則這將使您使用Enumerable版本。
Scott Hanselman做了DynamicQueryable的good explanation。基本上它允許你在運行時參數可能改變的地方有更多的活力。
唉!最後的答案是我的一位同事在我們的項目中添加了DynamicQueryable
擴展類(從http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx),ReSharper正在挑選它。
+1我會接受這個答案,如果你可以更新的概念(根據我自己的答案)有人可以添加實際的DynamicLinq擴展類直接到項目(即不是一個參考,但實際的代碼在項目中)。 – 2010-09-06 23:04:31
@ Neil:Eewww :)但回答正式編輯... – 2010-09-07 05:26:45
哦,來吧,嚴重嗎?我看到你的「製作C#做可能會導致世界末日的可怕事情」在NxtGenUG在伯恩茅斯舉行的「Fest 10」上演講......:P但是,是的,「eewww」的確如此。 :) – 2010-09-07 08:09:56