最近工作要用到LINQ的内容,组长给了我本LINQ实战(Linq in Action)让我看,按照书上的做了下面两个例子,就感觉LINQ真的太强大了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LinqDemo
{
class Program
{
static void Main(string[] args)
{
string[] words = { "hello","wonderful","linq","beautiful","word"};
//MethodOne(words);
MethodTwo(words);
}
private static void MethodTwo(string[] words)
{
//将查出的集合放到变量groups中
var groups =
//查出words中的每个单词,并定义到word字段中(此时words相当于一张只有一列的表,而现在列的名字就是word)
from word in words
//根据word进行排序
orderby word ascending
//根据word字段的长度进行分组,组的变量为lengthGroups(相当于words表中的数据是由若干个以组为单位的元素组成,也就是说现在words表的列的名字变成了lengthGroups,而lengthGroups也是一张简单的表,它的列的名字是word)
group word by word.Length into lengthGroups
//因为是以长度进行分组的,如果把words看成是对象,那么他就是lengthGroups类型的集合(也可以看成是一个字典表,键为lengthGroups.Key,值为lengthGroups)
//根据lengthGroups的Key属性值(字典表中的键)进行排序
orderby lengthGroups.Key ascending
//定义groups集合的基本类型(也就集合里是什么类型的元素)
select new { lenth = lengthGroups.Key, words = lengthGroups };
foreach (var group in groups)
{
Console.WriteLine("words of length " + group.lenth);
foreach (string word in group.words)
{
Console.WriteLine(" " + word);
}
}
}
private static void MethodOne(string[] words)
{
//查出长度小于等于5的单词集合
var shortwords =
from word in words
where word.Length <= 5
select word;
//遍历集合
foreach (var word in shortwords)
{
Console.WriteLine(word);
}
}
}
}
MethodOne比较简单,只能感觉到LINQ能把集合当做数据库中的表一样查询,MethodTwo就有点意思了(上面写了我对方法的每一句的理解),这个例子让我感觉到LINQ其实能把所有的数据看做表(像数据库中的表一样查询到想要的数据)和对象(又有对象的特征),它打破了编程语言和数据之间的的界限,使开发人员只需要会一种编程语言(任何一种编程语言,因为LINQ是一个可以扩展的)就能够随意的访问数据(任何类型的数据源)。