System.LINQ程序集是什么

这篇文章主要讲解了“System.LINQ程序集是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“System.LINQ程序集是什么”吧!

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比睢宁县网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式睢宁县网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖睢宁县地区。费用合理售后完善,十载实体公司更值得信赖。

LINQ,即Language Integrated Query。很多人熟悉SQL语言,用它来操作数据库非常方便。现在在C#3.0中也可以使用相同的语法来操作各种数据,包括数组,文件,数据库等。

下面看一个例子:

class Program  ...{  static void Main(string[] args)  ...{  string[] names=...{"Everett", "Albert", "George", "Harris", "David" };  var items=from name in names  where name.Length>=6  orderby name  select name.ToUpper();  foreach(var item in items)  Console.WriteLine(item);  }  }

是不是对上面的from,where,orderby等单词很熟悉,我们可以很轻松的像查询数据库一样查询某些数组。其实上述表达式等价于下面这样的写法:

  1. var items=names.Where(name=>name.Length>=6).
    OrderBy(name=>name).Select(name=>name.ToUpper()); 

那么我们为什么能在数组上应用这些方法呢,本来数组上没有这些方法啊?回忆一下我们原来说过的内容,扩展方法,对,我们在这里看到扩展方法的用武之地了。而且我们也看到了Lambda表达式的应用使得语句更加简洁,易懂。这些扩展方法定义在哪里呢?我们可以在System.LINQ程序集里面看到这样的定义:

namespace System.LINQ ...{   public static class Enumerable ...{   public static IEnumerable Where(   this IEnumerable source, Func predicate) ...{    foreach (T item in source)   if (predicate(item)  )   yield return item;   }   }   }

这里我们可以清晰的看到许多this关键字,这些正是扩展方法的标志。若果我们对Lambda表达式不是很熟悉的化,上面的LINQ语句还可以进一步转化成委托的形式。

Func filter = delegate (string s) ...{return s.Length >=6;};   Func extract = delegate (string s) ...{return s; };   Func project = delegate (string s) ...{return s.ToUpper(); };   var items = names.Where(filter) .OrderBy(extract) .Select(project);

有一个问题,我们会注意到items前面是用var做它的类型,那么有没有提出这样的疑问,这个var到底是什么类型呢?我们仔细看一下那个System.LINQ程序集,就会发现扩转方法返回的是IEnumerable类型,一个泛型接口,没错var就是这个泛型接口。还有一个问题就是当names满足什么条件时,我们可以应用LINQ表达式进行查询。这一点还要从那个程序集上仔细观察。我们会发现有一个source参数,根据扩展方法的语法我们知道这个source参数就是调用了这个方法的对象。那么我们可以推断出这个对象要能转换成IEnumerable。那什么类型可以成功转换呢?很显然只要实现了IEnumerable这个泛型接口的类型都可以转换。譬如数组类型,List,等等。当我们还可以自己定义类型只要实现了这个接口就可以用LINQ对这个类型进行操作。

感谢各位的阅读,以上就是“System.LINQ程序集是什么”的内容了,经过本文的学习后,相信大家对System.LINQ程序集是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


当前题目:System.LINQ程序集是什么
标题URL:http://ybzwz.com/article/jjejpo.html