【IT168技术文档】
如今的网络有很多伟大的创新,能够很容易利用LINQ的查询能力,并使之与Web用户界面的丰富新和灵活性相结合.的确很容易.
在开始之前你需要弄明白几个概念:
* LinqDataSource 控件 -- 允许你在基于Web的数据绑定中使用LINQ查询作为数据源.
* LinqDataSource.Selecting 事件 -- 允许你自定义任意LINQ定义查询(包括匿名查询) 为数据源. 只要从VB编辑器的下拉列表中选中LinqDataSource并选择Selecting事件, 然后在事件处理代码中设定e.Result = <你的LINQ查询> 即可.
* OR设计器和Linq 到SQL -- 如果你正用LINQ查询直接连接到SQL数据库 (而不是对象集合, xml, 等等) 上, 这是一种创建查询的简单方法, 我们称它为DataContext 对象. “OR”是对象-关系映射的缩写, 例如, 从关系数据库数据到.NET对象的映射
* ASP.NET 数据绑定表达式 -- 使你能够计算由数据源字段, 或简单控件的属性, 或控件列表而来的ASP形式的<%# Eval("YOURFIELD") %>表达式
用LINQ到SQL创建一个简单的Web窗体
第一篇文章用一个最简单的Web窗体, 来逐一解释这些概念. 然后我将根据你们的回复在以后的文章中添加更多主题并扩展这个示例.
下面是一个最初我们需要的Web窗体输出示例 -- 一个非常简单的人力资源程序的员工列表单 -- 我得承认它缺少修饰, 并需要一些用户界面上的加工:
如果你对Visual Studio非常熟悉, 我估计你只要10到15分钟就能在你自己的机器上实现.EmployeeID: 2 Andrew Fuller Andrew received his BTS commercial in 1974 and a Ph.D. in international marketing from the University of Dallas in 1981. He is fluent in French and Italian and reads German. He joined the company as a sales representative, was promoted to sales manager in January 1992 and to vice president of sales in March 1993. Andrew is a member of the Sales Management Roundtable, the Seattle Chamber of Commerce, and the Pacific Rim Importers Association. EmployeeID: 1 Nancy Davolio Education includes a BA in psychology from Colorado State University in 1970. She also completed "The Art of the Cold Call." Nancy is a member of Toastmasters International.
准备
- 确保已经安装Visual Studio 2008 或 Visual Web Developer 2008 Express. Express 版本.
- 确保安装了 SQL Server 2005 Express 并已启动. 它通常在安装VS 或VS Express的同时默认被安装. 你也可以从这里下载安装.
- 如果在你的机器上没有Northwind.mdf, 可以从这篇文章的附件中下载.
为网站添加数据
首先我们要把数据库添加到我们的工程中, 并创建必要的类以使用LINQ中的数据库 (用Linq到SQL).注意, 你可以选择跳过此步骤并创建你自己的LINQ查询到其他数据库上.
通过File -> New Web Site ... -> ASP.NET Web Site创建一个新的网站到本地目录
把Northwind数据库添加到网站的App_Data文件夹
1. 从本文附件中下载 Northwind.mdf 文件并保存到本地硬盘上
2. 把这个文件拖放到解决方案管理器的App_Data文件夹中

通过OR设计器为Northwind创建LINQ到 SQL的类. Linq 到 SQL 类会被保存在一个.dbml 文件中并可以在可视的OR设计器中打开.
1. 在解决方案资源管理器中右键单击网站结点, 选择快捷菜单的Add New Item -> Linq To SQL Classes
2. 把"DataClasses.dbml" 重命名为"NorthwindDataClasses.dbml". (这样做很重要, 以便在代码和VS向导中找到这些类).
3.

4.当下图中的对话框出现时, 点击 Yes以添加这个文件到App_Code 文件夹中. 这样做很重要, 因为网站需要动态地编译设计器生成的代码..
5.

6.双击 NorthwindDataClasses.dbml 以便在OR设计器中打开它.
添加 Employees表的对象到你的 Linq到SQL 类中
1. 打开服务器管理器 (在Express里是数据库管理器)
2. 展开Northwnd.MDF -> Tables -> Employees
3. 从服务器管理器中拖放Employees 表结点到NorthwindDataClasses.dbml 设计区域中(注意: 你可以继续添加更多的表, 或者存储过程, 或在设计器中自定义它们的名称/属性).
4. 点击Save All按钮或菜单保存所有文件

排列窗体界面和数据源控件
我们已经把数据库添加到网站上并创建了必要的LINQ到SQL类, 现在应该添加一些用户界面元素并连接数据到界面上了. 我不会做任何太漂亮的东西 -- 只是重复地绑定一个DataList (你可以把它替换成GridView, FormView 或其他你喜欢的控件) 中的文本框.
1. 双击 Default.aspx , 在设计器中打开这个页面
2. 从工具箱的Data选项卡中拖放一个DataList到Default.aspx 的设计区域中(或者拖放到”Source”视图的当前DIV标记区域内)
3. 从工具箱的Data选项卡中拖放一个LinqDataSource 控件到 Default.aspx 的设计区域中(或者拖放到”Source”视图的DataList正下方)
连接 LinqDataSource 到底层数据(LINQ 到SQL - DataContext)
我们需要把LinqDataSource 连接到底层的LINQ数据上. 在这种情况下数据由任何一个基于NorthwindDataClasses 对象 (一个LINQ到SQL 文件) 的DataContext 对象或查询提供. 然后DataList可以直接把LinqDataSource 作为数据源, 并使用经典的Eval(“”) 语句通过绑定的字段显示数据. 如果你使用Smart Tags (智能标记), 设计器会为你生成一系列的默认值. 那我们就试试默认情况, 然后在此基础上做些调整.
1. 在设计器中选中 LinqDataSource 控件. 展开它的智能标签并点击Configure Data Source...
2.

3.此时一个向导对话框会弹出, 并默认把NorthwindDataClasses 作为源. (任何其他你添加的可供查询的源也会在这里显示). 点击Next.
4.

5.你可以选择任意列或字段. 本例中我选择*. 你甚至可以设置一个Where子句 -- 不过我认为在代码中作参数化的查询或其他类型的查询操作会更容易一些. 我过会儿会作个演示... 点击 Finish.

7. 你可以选择性地从LinqDataSource 的智能标签里启用Delete, Insert, 和Update. 提示: 如果你要建一个可读/写的web窗体, 这会非常有用.

下面是在”Source”视图中可以看到的LinqDataSource 的标记. 注意ContextTypeName="NorthwindDataClassesDataContext" -- 这个值是我们在设计器中创建的类型名称 (代码生成器在末尾添加了一个"DataContext" -- 这名字真长!). TableName 设置为我们想要显示的表或属性 -- 本例中设为Employees. 你可以用这种方法绑定任何现有的DataContext 类型和类属性.
绑定界面控件到 LinqDataSource<asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="NorthwindDataClassesDataContext" TableName="Employees"> </asp:LinqDataSource>
现在让我们把 DataList连接到 LinqDataSource. 有一个好消息是DataList只关心LINQ查询通过LinqDataSource返回的字段名称 -- 当你不断改进动态 LINQ查询的字段和行结果时会给你方便.
1. 在设计器中选中DataList. 展开智能标签并选择Data Source = LinqDataSource1
2. 自定义一下DataList的ItemTemplate
3. 运行! (按F5 或在快捷菜单中点击 View in Browser)
默认情况下向导会创建一系列绑定的文本标签. 你可以利用设计器在编辑模式下选取你想要的.提示: 这是我通常在”Source”视图中拖放html标记的地方. 在本例中, 我只简单地显示full name, notes, 还有一块显示员工相片的地方. 并把数据转化到一个有两列的表格中.
如果你检查一下DataList的标记, 你会发现ItemTemplate包含一些绑定的文本标签. 从查询中绑定数据是一个非常简单的过程,你只需要在服务器控件字段中, 用经典的ASP样式和VB eval数据绑定语句, 输入<%# Eval("YOURFIELDNAME") %>. 这为显示你想要的数据及格式化它们提供了很大的灵活性. 下面是我自定义的:
EmployeeID:<div> <asp:DataList ID="DataList1" runat="server" DataKeyField="EmployeeID" DataSourceID="LinqDataSource1"> <HeaderTemplate> <table> </HeaderTemplate> <ItemTemplate> <tr> <td> <img src="PLACEHOLDER.jpg" class="" style="border: 4px solid white" alt='Photo Number XXX' /> <br /><br /> </td> <td>
<asp:Label ID="EmployeeIDLabel" runat="server" Text='<%# Eval("EmployeeID") %>' /> <br /> <asp:Label ID="LastNameLabel" runat="server" Text='<%# Eval("FirstName") & " " & Eval("LastName") %>' /> <br /> <asp:Label ID="NotesLabel" runat="server" Text='<%# Eval("Notes") %>' /> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:DataList> </div>