Linq使用方法

来源:互联网 发布:java multieditor 编辑:程序博客网 时间:2024/06/08 15:59

Linq是一种面向对象的查询方式,它和SQL语句及其类似,sql写法 select * from 表  Linq写法 from n in 数据源 select n;

为什么不跟sql写法一样将select一同写在语句的开头呢?主要是当时做IDE时考虑到智能感应,将select写在语句头不利于编程环境的智能感应,其中的奥妙自行百度理解哈,这边不详讲

Linq的查询对象可以是所有实现了IEnumerable的类型,比如数组,数据库集合(DataTable,DataSet...),Arraylist,List,

用Linq这种写法对于我们来说更加的直观,当然你也可以使用foreach和for。相对于这两种查询语句,Linq执行的效率和性能要优胜,

Linq>foreach>for

//--------------------单值选择查询------------------------            var queryResults1 = customers.Select(c => c.id).Distinct();   //customers是模型类             var queryResults2 = (from c in customers select c.id).Distinct();

只是个声明,dlinq并没有真正把数据取出来,只有当你需要该数据的时候,它才会帮你去取,这就是延迟加载(deferred loading)。如果,你想在声明的时候就希望dlinq帮你取到数据,你可以使用ToList() 或ToArray()方法。

//--------------------单值选择查询------------------------            var queryResults1 = customers.Select(c => c.id).Distinct().ToArray();   //customers是模型类            var queryResults2 = (from c in customers select c.id).Distinct().ToList();

ToDictionary()LINQ扩展方法

ToList() 使用IEnumerable<T>并将其转换为 List<T>,那么 ToDictionary()也是类似的。大多数情况ToDictionary()是一个非常方便的方法,将查询的结果(或任何 IEnumerable<T>)转换成一个Dictionary<TKey,TValue>。 关键是您需要定义T如何分别转换TKey和TValue。

如果说我们有超级大的产品列表,希望把它放在一个Dictionary<int, product>,这样我们可以根据ID得到最快的查找时间。 你可能会这样做:

1  var results = new Dictionary<int, Product>();2  foreach (var product in products)3  {4      results.Add(product.Id, product);5  }

和它看起来像一个很好的代码,但是我们可以轻松地使用LINQ而无需手写一大堆逻辑:

1 var results = products.ToDictionary(product =>  product.Id);

它构造一个Dictionary<int, Product> ,Key是产品的Id属性,Value是产品本身。 这是最简单的形式ToDictionary(),你只需要指定一个key选择器。 如果你想要不同的东西作为你的value? 例如如果你不在乎整个Product,,你只是希望能够转换ID到Name? 我们可以这样做:

1 var results = products.ToDictionary(product =>  product.Id, product =>  product.Name);

 

这将创建一个 Key为Id,Value为Name 的Dictionary<int, string>,。由此来看这个扩展方法有很多的方式来处理IEnumerable<T> 集合或查询结果来生成一个dictionary。

补充阅读:http://www.cnblogs.com/haorui/p/4516208.html

http://www.cnblogs.com/YuanSong/archive/2012/08/02/2619651.html

0 0