System.Linq.Dynamic和System.Linq之间的区别?

时间:2010-09-06 16:38:31

标签: c# linq

使用ReSharper,我偶尔会获得快速修复建议,以便为LINQ操作导入命名空间。所以在一个全新的类中给出以下代码:

linqToSqlDataContext.Customers.Count();

我得到一个快速修复下拉列表如下:

alt text

我应该选择哪个,它们之间有什么区别?

5 个答案:

答案 0 :(得分:5)

System.Linq.Dynamic是Dynamic LINQ的命名空间。除非您已添加对Dynamic LINQ程序集的引用,否则不应将其视为选项。你这样做了吗? 如果您实际上希望使用Dynamic LINQ,那么您应该这样做。

动态LINQ允许您将查询表达为文本 - 有点像DataTable.Select。我个人从来没有找到它的用途,但你可能想要它。但这应该是一个慎重的选择。大多数情况下,你可以使用静态类型的LINQ to Objects。

编辑:根据OP的评论,动态LINQ的代码可以直接添加到项目中,而不是作为单独的程序集引用。即使您实际上想要使用动态LINQ,我强烈建议将其保存在单独的程序集中,而不是将其与您自己的代码混合使用。

答案 1 :(得分:1)

动态LINQ是non-typesafe version of LINQ.,它使用字符串而不是lambdas来生成查询。

除非您需要任何专业功能,否则您将使用“可枚举”版本。

答案 2 :(得分:1)

Scott Hanselman做了good explanation的DynamicQueryable。基本上,它允许您在运行期间参数可能会发生变化时更具活力。

答案 3 :(得分:0)

哎呀!答案最后是我的一位同事将DynamicQueryable扩展类添加到我们的项目中(来自http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx),而ReSharper正在挑选它。

答案 4 :(得分:0)

因为我在这里没有看到任何使用Dynamic LINQ的示例,所以它就行了:

在我的教师项目中,我遇到一种情况,我将使用存储库模式对我使用的数据库技术(特别是实体框架)进行抽象。 在我的存储库中,我将有一个类似这样的方法:

public IEnumerable<T> Find(Expression<Func<T, bool>> predicate);

如您所见,表达式用作谓词。

此外,我通过WCF进行了客户端-服务器通信。由于表达式不可序列化,因此我不得不使用动态LINQ,我只能发送谓词的字符串表示形式并将其与我的存储库一起使用。