这里介绍LINQ to SQL查询不足以满足专门任务的需要,我们可以使用 ExecuteQuery 方法来执行LINQ to SQL查询,然后将查询的结果直接转换成对象。
LINQ to SQL有很多值得学习的地方,这里我们主要介绍LINQ to SQL查询,包括介绍直接执行SQL命令等方面。
直接执行LINQ to SQL查询
如果 LINQ to SQL查询不足以满足专门任务的需要,我们可以使用 ExecuteQuery 方法来执行LINQ to SQL查询,然后将查询的结果直接转换成对象。
- var products = db.ExecuteQuery<Product>(
- "SELECT [Product List].ProductID,"+
- "[Product List].ProductName " +
- "FROM Products AS [Product List] " +
- "WHERE [Product List].Discontinued = 0 " +
- "ORDER BY [Product List].ProductName;"
- );
语句描述:这个例子使用ExecuteQuery<T>执行任意LINQ to SQL查询,并将所得的行映射为 Product 对象的序列。
直接执行SQL命令
采用DataContext 连接时,可以使用ExecuteCommand来执行不返回对象的 SQL命令。
- db.ExecuteCommand
- ("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