快速业务通道

LINQ体验(13)——LINQ to SQL语句之运算符转换和ADO.NET与LINQ to SQL

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

运算符转换1.AsEnumerable:将类型转换为泛型 IEnumerable

使用 AsEnumerable<TSource> 可返回类型化为泛型 IEnumerable 的参数。在 此示例中,LINQ to SQL(使用默认泛型 Query)会尝试将查询转换为 SQL 并在 服务器上执行。但 where 子句引用用户定义的客户端方法 (isValidProduct), 此方法无法转换为 SQL。

解决方法是指定 where 的客户端泛型 IEnumerable<T> 实现以替换泛型 IQueryable<T>。可通过调用 AsEnumerable<TSource>运算符来执行此操作。

var q =
  from p in db.Products.AsEnumerable()
  where isValidProduct(p)
  select p;

语句描述:这个例子就是使 用AsEnumerable以便使用Where的客户端IEnumerable实现,而不是默认的 IQueryable将在服务器上转换为SQL并执行的默认Query<T>实现。这很有 必要,因为Where子句引用了用户定义的客户端方法isValidProduct,该方法不 能转换为SQL。

2.ToArray:将序列转换为数组

使用 ToArray <TSource>可从序列创建数组。

var q =
  from c in db.Customers
  where c.City == "London"
   select c;
Customer[] qArray = q.ToArray();

语句描述:这 个例子使用 ToArray 将查询直接计算为数组。

3.ToList:将序列转换为 泛型列表

使用 ToList<TSource>可从序列创建泛型列表。下面的示例 使用 ToList<TSource>直接将查询的计算结果放入泛型 List<T>。

var q =
  from e in db.Employees
  where e.HireDate >= new DateTime(1994, 1, 1)
  select e;
List<Employee> qList = q.ToList();
4.ToDictionary:将序 列转化为字典

使用Enumerable.ToDictionary<TSource, TKey>方法可 以将序列转化为字典。TSource表示source中的元素的类型;TKey表示 keySelector返回的键的类型。其返回一个包含键和值的Dictionary<TKey, TValue>。

var q =
  from p in db.Products
  where p.UnitsInStock <= p.ReorderLevel && ! p.Discontinued
  select p;
Dictionary<int, Product> qDictionary =
  q.ToDictionary(p => p.ProductID);
foreach (int key in qDictionary.Keys)
{
   Console.WriteLine(key);
}

语句描述:这个例子使用 ToDictionary 将查询和键表达式直接键表达式直接计算为 Dictionary<K, T>。

ADO.NET与LINQ to SQL LINQ to SQL 基于由 ADO.NET 提供程序 模型提供的服务。因此,我们可以将 LINQ to SQL 代码与现有的 ADO.NET 应用 程序混合在一起,将当前 ADO.NET 解决方案迁移到 LINQ to SQL。1.连接

在创建 LINQ to SQL DataContext 时,可以提供现有 ADO.NET 连接。对 DataContext 的所有操作(包括查询)都使用所提供的这个连接。如果此连接已 经打开,则在您使用完此连接时,LINQ to SQL 会保持它的打开状态不变。我们 始终可以访问此连接,另外还可以使用 Connection 属性自行关闭它。

//新建一个标准的ADO.NET连接:
SqlConnection nwindConn = new SqlConnection(connString);
nwindConn.Open();
// ... 其 它的ADO.NET数据操作代码... //
//利用现有的ADO.NET连接来创建一个 DataContext:
Northwind interop_db = new Northwind(nwindConn);
var orders =
   from o in interop_db.Orders
   where o.Freight > 500.00M
   select o;
//返回 Freight>500.00M的订单
nwindConn.Close();

语句描述:这 个例子使用预先存在的ADO.NET连接创建Northwind对象,本例中的查询返回运费 至少为500.00 的所有订单。

2.事务

当我们已经启动了自己的数据库 事务并且我们希望DataContext 包含在内时,我们可以向 DataC

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号