有没有一种方法可以在.NET 3.0项目中使用LINQ查询语法?

6
我有一个项目,只能在运行.NET 3.0的服务器上部署。 我非常希望使用LINQ来简化一些极其乏味的逻辑。 有没有简单的方法可以实现这一点?我愿意接受任何语法。
谢谢。
3个回答

3

自 .NET 2.0 到 3.5 都是在 CLR 2.0 上运行的,所有的 LINQ 内容只是一堆库。如果您在框架版本中包括了缺失的 DLL,它将可以正常工作。

正如 Patrick 所说,关键的 3.5 DLL 是 System.Core.dll(提供 System.Linq)和 System.Data.Linq.dll(用于 Linq-to-SQL)。

如果这样做,我认为您需要至少 .NET 2.0SP1 的 System.dll。

如 Marc 引用的那样,LINQBridge 通过重新实现功能来工作,但我想只限于 Linq-to-Objects。

另一个选择是使用 Mono 项目中的相同 DLL(System.Core.dll 和 System.Data.Linq.dll)。他们已经重新实现了所有的 LINQ。Linq-to-Sql 的东西可能有点不成熟,但它确实有一个优点,就是可以与除 MSSQL 之外的其他数据库一起使用。

http://mono-project.com/Main_Page

这将消除使用 Microsoft DLL 随应用程序分发的任何法律问题。


当我说Mono已经实现了所有的LINQ时,我的意思是它支持Linq-to-Objects、Linq-to-XML和Linq-to-Sql(通过DBLinq项目)。截至2010年7月,最新版本的Mono是2.6.7,这也是我获取程序集的地方。 - Justin
这是目前问题中最好的答案! - Mike Atlas
1
哦,我应该补充说明,如果你想使用Linq-to-XML,你还需要System.Xml.Linq.dll。Patrick用他的绝地力量欺骗了我。 - Justin

2

我的同事使用了LINQBridge并取得了成功。


哇,不错的工具,我会去试试看。 - Nealv
我认为@Justin的答案更好(引用Mono库)- 如果是我,我真的很想使用LINQ to XML。此外,Mono社区是庞大且活跃的,而这只有一个人实现,我甚至无法确定它是否得到了维护。库上的MIT许可证也使其适用于大多数公司场景。 - Mike Atlas
那么我为什么得到了-1分?因为你喜欢其他答案更好吗? - Marc
我猜它不应该被踩。如果你愿意,如果你对帖子进行编辑,我可以撤销它。 - Mike Atlas
1
@Mike,如果你认为它没有回答问题,请给它一个负评;我不在乎MMORPG的声望。但是我的观点是它很好地解决了问题。但至少,请留下一条评论,说明为什么你觉得它不能解决所述的问题。关于它是LINQ to Objects的警告已经在引用页面以及你的原始评论中都有提到。 - Marc

2

摘自http://codebeat.wordpress.com/2008/06/23/using-linq-in-net-30/

  1. 首先,配置使用Linq到.NET 3.0的项目的目标框架。.NET 3.5的引用将被删除。
  2. 然后,在解决方案中复制System.Data.Linq.dll和System.Core.dll文件到您喜欢的任何位置(在我的情况下是根文件夹)。
  3. 将它们作为参考添加到所有相应的项目中。Visual Studio会警告这些程序集需要更高版本的框架。按“是”按钮。
  4. 将参考的SpecificVersion属性设置为true。这将防止编译错误。

我尝试过这个方法,它可以工作,但要注意Mike Atlas关于部署这两个文件的法律风险的警告。


这实际上会涉及到重新分发微软库的法律问题。做这件事要小心。 - Mike Atlas
这个对我其实不起作用。当我将目标框架从3.5更改为3.0后,Visual Studio会删除System.Core和System.Data.Linq dlls。 - Tushar S
@Silver Gun,你在将版本更改为3.0后尝试重新添加引用了吗? - Patrick McDonald
@Patrick McDonald - 是的,但是Visual Studio会将与不兼容或更新版本框架的DLL变灰。 - Tushar S
既然您已经接受了另一个答案,我不确定为什么您还在看这个。但是,看起来您忽略了上面的第2步,您需要将这两个dll文件复制到您的项目/解决方案文件夹中,并从“浏览”选项卡上的“添加引用”对话框中添加它们作为引用,您无法从“.NET”选项卡中添加它们。 - Patrick McDonald
嗨,Patrick。我会尝试一下。我接受了Mono的解决方案,但我想要更简单的东西,不需要新的安装。你的方法就是这样。=) - Tushar S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接