原文地址:http://blogs.msdn.com/bethmassi/archive/2007/08/21/converting-vs-2005-projects-to-vs-2008.aspx
作者: Beth Massi
你有一个VS2005写的程序,你想转换它并使用在VS2008中的LINQ。在这里我将给主要的步骤,包括使LINQ工作时你可能要用到的提供器(Provider)。
在Visual Studio 2008 中,新的多平台(multi-targeting)特性允许你工作在VS2008下却能够写出面向.NET 2.0,3.0,3.5平台的程序。ScottGu 有个很好的帖子 讨论这个和 Rick Strahl 。这个意谓着你不需要在机器上安装多个版本的VS IDE来处理之前版本的.NET目标平台。(注意:如果你目标平台是.NET 1.0或1.1 那么你仍需要 2002或者 2003)这是一个好的消息不仅仅因为它能节省磁盘空间和上下文开关(context switching),它允许你利用新的调试工具和编辑器的好处不需要冒着升级当前项目的风险)。然而,当你希望升级项目到3.5,开始使用LINQ的优势,你需要自己手动导入一些新的命名空间。
当你在VS2008中第一次打开VS2005写的项目的时候VS2008将会提示你升级项目。实际上是升级项目(.vbproj) 和解决方案(.sln) 文件兼容VS2008。项目文件实际仍向后兼容VS2005,所以你仍能打开它解决方案文件。而然他是单向的。所以如果你所在开发小组同时使用VS2005和VS2008 IDE时,你将需要2个解决方案文件,幸运的是你的项目文件(那些比项目文件更加经常变化的文件)可以共享。
所谓的升级,仅仅是处理升级你的项目和解决方案文件,但你的程序的目标平台仍然.NET 2.0。在你升级完的程序里使用新特性像LINQ你需要更改目标平台和添加一些引用。你也会希望打开新的 Option Infer 特性。这个允许编译器推断本地变量类型声明通过评估右边表达式(right-hand side of the expression)。这将在编写LINQ查询时非常有用。现在,要更改目标框架,单击“高级编译选项”按钮 并更改目标平台在下拉框:
选择 .NET Framework 3.5 ,单击 OK,然后项目将关闭并重新打开。如果你再一次打开项目属性并查看引用标签,你将注意到System.Core.dll 版本3.5 将自动引用进来。然而,要使用LINQ你仍需要导入一些LINQ依赖的命名空间和添加一些引用。要使用LINQ to Objcects,在选项标签下导入命名空间选择 System.Linq。现在你将能够编写面向对象的查询了,像是:
Dim currentFiles = From File In My.Computer.FileSystem.GetFiles(CurDir) _Select My.Computer.FileSystem.GetFileInfo(File)
要使用工作在数据集上的查询,你需要引用System.Data.DataSetExtensions 然后你需要重新运行数据集生成器。之后就可以写LINQ查询了在数据集上。像是右击数据集并单击“运行自定义工具(Run Custom Tool)”。这将产生数据集代码,所以那个数据表将从LINQ-Ready类名为TypedTableBase (在System.Data.DataSetExtension 命名空间下)继承。现在你将能够编写查询在类型化数据集上。例如,你可以写:
Dim total = Aggregate Products In Me.CategoryProductDataSet.Products _Where Products.CategoryID = 1 AndAlso _
Products.Discontinued = False _
Into Sum(Products.UnitPrice * Products.UnitsInStock)
如果你希望开始使用LINQ to XML提供器 ,你需要引用 System.Xml.Linq.dll 和 导入 System.Xml.Linq命名空间。之后你就可以编写XML查询了像:
Dim survey = XElement.Load(CurDir() & "\questions.xml")Dim questions = From q In survey...<question> Select q
最后,如果你希望使用LINQ to SQL 类到你升级的项目里,非常简单。仅仅右击并选择添加新项目,然后选择 LINQ to SQL 类模板,之后将打开新的 O/R 设计器并自动的添加System.Data.Linq.dll 引用。这将允许你编写如下的查询:
Dim countryList = From Customer In Db.Customers _
Where Customer.Country <> "" _
Order By Customer.Country _
Select Customer.Country Distinct
我希望我阐明如果在VS2008开始使用LINQ到你当前的程序中。