使用ReSharper,我偶尔会获得快速修复建议,以便为LINQ操作导入命名空间。所以在一个全新的类中给出以下代码:
linqToSqlDataContext.Customers.Count();
我得到一个快速修复下拉列表如下:
我应该选择哪个,它们之间有什么区别?
答案 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,我只能发送谓词的字符串表示形式并将其与我的存储库一起使用。