LINQ to SQL查询和SQL命令

LINQ to SQL查询和SQL命令
  • 这里介绍LINQ to SQL查询不足以满足专门任务的需要,我们可以使用 ExecuteQuery 方法来执行LINQ to SQL查询,然后将查询的结果直接转换成对象。

LINQ to SQL有很多值得学习的地方,这里我们主要介绍LINQ to SQL查询,包括介绍直接执行SQL命令等方面。

直接执行LINQ to SQL查询

如果 LINQ to SQL查询不足以满足专门任务的需要,我们可以使用 ExecuteQuery 方法来执行LINQ to SQL查询,然后将查询的结果直接转换成对象。

  1. var products = db.ExecuteQuery<Product>
  2. "SELECT [Product List].ProductID,"+ 
  3. "[Product List].ProductName " + 
  4. "FROM Products AS [Product List] " + 
  5. "WHERE [Product List].Discontinued = 0 " + 
  6. "ORDER BY [Product List].ProductName;" 
  7. );

语句描述:这个例子使用ExecuteQuery<T>执行任意LINQ to SQL查询,并将所得的行映射为 Product 对象的序列。

直接执行SQL命令

采用DataContext 连接时,可以使用ExecuteCommand来执行不返回对象的 SQL命令。

  1. db.ExecuteCommand 
  2. ("UPDATE Products SET UnitPriceUnitPrice = UnitPrice + 1.00");

语句描述:使用ExecuteCommand执行任意SQL命令,本例中为将所有产品单价提高 1.00 的批量更新。

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>。

 

转自 http://www.cnblogs.com/tianguook/archive/2010/11/15/1877949.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值