当前位置:首页 > 编程技术 > 正文内容

.NET 2.0运行时的LINQ

yc8885个月前 (12-04)编程技术126

.NET 2.0运行时的LINQ

启用LINQ的应用程序是否可以在仅安装了.NET 2.0运行时的计算机上运行?

从理论上讲,LINQ只不过是语法糖,而得到的IL代码应该与.NET 2.0中的代码相同.

如何在不使用.NET 3.5库的情况下编写LINQ?它会在.NET 2.0上运行吗?



1> Mauricio Sch..:


没人提到LINQBridge是很奇怪的.这个小巧的项目是LINQ(IEnumerable,但没有IQueryable)及其依赖(Func,Action等)到.NET 2.0的后端.和:

如果您的项目在编译期间引用LINQBridge,那么它将绑定到LINQBridge的查询运算符; 如果它在编译期间引用System.Core,那么它将绑定到Framework 3.5的查询运算符.



+1我经常使用它.注意:这是LINQ to Objects(IEnumerable扩展)的实现,如果使用针对框架2.0+的VS2008(C#3.0),则可以很好地工作.它不是LINQ to SQL或其他LINQ提供程序的实现.

2> Michael Stum..:


有一些"黑客"涉及使用3.5 Framework中的System.Core.dll使其与.net 2.0一起运行,但我个人不希望使用这样一个有点摇摇欲坠的基础.

请参见此处:.NET 2.0上的LINQ支持

    创建一个新的控制台应用程

    仅将System和System.Core保留为引用的程序集

    为System.Core将Copy Local设置为true,因为它在.NET 2.0中不存在

    在Main方法中使用LINQ查询.例如下面的那个.

    建立

    将所有bin输出复制到仅安装.NET 2.0的计算机

(需要.net 2.0 SP1,我不知道捆绑System.Core.dll是否违反了EULA)



重新分发System.Core.dll违反了Microsoft的许可

3> John Downey..:


理论上是的,只要您分发LINQ特定程序集和任何依赖项.但这违反了微软的许可.Scott Hanselman写了一篇关于在ASP.NET 2.0上部署ASP.NET MVC的博客文章,这与您想要做的类似.




4> Stefan Steig..:


您可以使用mono(Linux for Linux)中的LINQ源来在.NET 2.0上运行LINQ.

?
IEnumerable<t> : yes
IQueryable<t>  : yes
LINQ to XML : has been working in the trunk, but due to further additions, the trunk doesn't compile anymore
</t></t>

有人在这里完成了:
LINQ for .NET 2.0




5> Lucas..:


简短回答:


LINQ to Objects:是(IEnumerable)

LINQ to SQL/Entities:no(IQueryable)

LINQ to XML/DataSet:尚未?



见这个问题从VS2008靶向NET 2.0左右时,可用的.Net 3.5功能,自动或毫不费力.

基本上,任何只有"语法糖"的东西和新的编译器(C#3.0,VB 9.0)都会发布兼容2.0的IL.这包括LINQ使用的许多功能,例如匿名类,作为匿名委托的lambdas,自动属性,对象初始值设定项和集合初始值设定项.

一些LINQ功能使用新的3.5程序集(例如System.Core.dll)中的类,接口,委托和扩展方法.重新分发这些程序集是违反许可证的,但可以重新实现它们.使用扩展方法只需要声明为空System.Runtime.CompilerServices.ExtensionAttribute.LINQ到对象依赖于IEnumerable扩展和几个委托声明(中ActionFunc家庭),并已在实施LINQBridge(如mausch提到).LINQ to XML和LINQ to DataSets依赖于LINQ to Objects,我想也可以为.Net 2.0实现,但我还没有看到这样做.

LINQ to SQL和LINQ到实体需要许多新的类(DataContextObjectContext,大量的属性,EntitySet,EntityRef,Link,IQueryable,等)和表达式树,其中,即使在某种程度上重新实现,可能需要至少NET 2.0 SP1工作.




6> Scott Wisnie..:


我不确定C#.

但是,我知道,只要使用VS 2008编译器来定位2.0框架,就可以编写VB LINNQ代码.

但是,您必须实现一些自己的LINQ方法.

LINQ使用合成转换将查询转换为可执行代码.基本上,它将采用这样的代码:

?
dim q = from x in xs where x > 2 select x*4;

并将其转换为如下代码:

?
dim q = xs.where(function(x) x > 2).select(function(x) x * 4);

对于3.5框架附带的LINQ功能,这些方法在IEnumerable或IQueryable上实现为扩展方法(也有一堆方法也适用于数据集).

默认的IEnumerable扩展方法在System.Linq.Enumerable中定义,如下所示:

?
<extension()>
public function Select(of T, R)(source as IEnumerable(of T), transform as Func(of T, R)) as IEnumerable(of R)
 
   'do the transformation...
 
end function
</extension()>

IQueryable扩展方法将表达式树作为参数,而不是lambdas.它们看起来像这样:

?
<extension()>
 public function Select(of T, R)(source as IQueryable<t>, transform as Expression(of Func(of T, R))
     'build a composite IQueryable that contains the expression tree for the transformation
 end function
</t></extension()>

表达式树版本使您能够获得提供给子句的表达式的树表示,然后可以使用它们来生成SQL代码(或者您想要的任何其他内容).

您可以在大约一天左右的时间内创建自己的LINQ对象版本.这一切都很直接.

如果你想使用DLINQ,那么事情会有点困难.


本站发布的内容若侵犯到您的权益,请邮件联系站长删除,我们将及时处理!


从您进入本站开始,已表示您已同意接受本站【免责声明】中的一切条款!


本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行研究。


本站资源仅供学习和交流使用,版权归原作者所有,请勿商业运营、违法使用和传播!请在下载后24小时之内自觉删除。


若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。


本文链接:https://www.10zhan.com/biancheng/10799.html

标签: .NET
分享给朋友:

“.NET 2.0运行时的LINQ” 的相关文章

【说站】laravel实现自定义404页面并给页面传值

【说站】laravel实现自定义404页面并给页面传值

以 laravel5.8 为例,虽然有自带的404页面,但太简单,我们更希望能自定义404页面,将用户留在站点。实现的方式很简单,将自定义的视图文件命名为 404.blade.php,并放到 reso...

【说站】Thymeleaf报错Error resolving template “XXX”

【说站】Thymeleaf报错Error resolving template “XXX”

修改了一下开源项目的目录结构访问突然报错Error resolving template “XXX”可能原因有如下三种:第一种可能:原因:在使用springboot的过程中,如果使用thymeleaf...

【说站】用一句话就可以去除宝塔面板操作上的二次验证

【说站】用一句话就可以去除宝塔面板操作上的二次验证

用过宝塔的朋友应该都会发现,现在宝塔面板有些鸡肋的功能,删除文件、删除数据库、删除站点等操作都需要做计算题!不仅加了几秒的延时等待,还无法跳过!这时候就会有朋友在想,如何去除宝塔面板的二次验证,此篇文...

【说站】利用Webhook实现Java项目自动化部署

【说站】利用Webhook实现Java项目自动化部署

用webhook就能实现Java项目自动部署,其实原理很简单。费话不多说,直接往下看教程。1. 创建gitee仓库并初始化2. 在linux安装git3. 在宝塔的软件的商店里下载Webhook4....

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

今天在安装MySQL时出现starting the server失败,经过查询分析得出以下结论,记录一下操作步骤。原因分析:如果电脑是第一次安装MySQL,一般不会出现这样的报错。如下图所示。star...

【说站】vagrant实现linux虚拟机的安装并配置网络

【说站】vagrant实现linux虚拟机的安装并配置网络

一、VirtualBox的下载和安装1、下载VirtualBox官网下载:https://www.virtualbox.org/wiki/Downloads我的电脑是Windows的,所以下载Wind...