LINQ to Objects
?
前面我们在介绍LINQ的时候简单的提了一下LINQ to Objects,现在我们来学习一下LINQ to Objects,主要包括LINQ操作集合,字符串,文件目录。
?
先来看LINQ操作集合
LINQ可以操作.NET中的大多数集合,因为大多数集合都实现了IEnumerable<T>接口,并且可以很轻松的对集合的元素进行筛选,排序,分组等。
静态数组:
?public class people
?? ? ? ?{
?? ? ? ? ? ?public string name;
?? ? ? ? ? ?public int age;
?? ? ? ?}
?? ? ? ?protected void Button1_Click(object sender, EventArgs e)
?? ? ? ?{
?? ? ? ? ? ?people[] person = new people[3];
?? ? ? ? ? ?for (int i = 0; i <person.Length; i++)
?? ? ? ? ? ?{
?? ? ? ? ? ? ? ?people peo = new people();
?? ? ? ? ? ? ? ?peo.name = "peo" + i.ToString();
?? ? ? ? ? ? ? ?peo.age = i;
?? ? ? ? ? ? ? ?person[i] = peo;
?? ? ? ? ? ?}
?? ? ? ? ? ?var result = from u in person where u.age!=0 orderby u.age descending select u;
?? ? ? ? ? ?foreach (var item in result)
?? ? ? ? ? ?{
?? ? ? ? ? ? ? ?Label1.Text += item.name;
?? ? ? ? ? ?}
?? ? ? ?}
动态数组:
?protected void Button2_Click(object sender, EventArgs e)
?? ? ? ?{
?? ? ? ? ? ?ArrayList arraylist = new ArrayList();
?? ? ? ? ? ?for (int i = 0; i < 4; i++)
?? ? ? ? ? ?{
?? ? ? ? ? ? ? ?people peo = new people();
?? ? ? ? ? ? ? ?peo.name = "peo" + i.ToString();
?? ? ? ? ? ? ? ?peo.age = i;
?? ? ? ? ? ? ? ?arraylist.Add(peo);
?? ? ? ? ? ?} ?操作ArrayList等非继承自泛型IEenumerable类型时要给指明范围变量u的类型,这在LINQ第一讲时已经提到过了
?? ? ? ? ? ?var result=from people u in arraylist where u.age!=0 orderby u.age descending select u;
?? ? ? ? ? ?foreach (var item in result)
?? ? ? ? ? ? {
?? ? ? ? ? ? ? ?Label2.Text += item.name;
?? ? ? ? ? ? }
?? ? ? ? ?}
泛型列表List<T>:
略
泛型排序列表SortedList<TKey,TValue>:
泛型排序列表是由"键/值"对组成的集合,其内集合按照键值进行排序。每一个元素是KeyValuePair<Tkey,TValue>对象。键不能修改不能为空,值必须唯一可以为空。使用比较器来实现排序和比较操作。
?? protected void Button3_Click(object sender, EventArgs e)
?? ? ? ?{
?? ? ? ? ? ?SortedList<string, people> sortedlist = new SortedList<string, people>();
?? ? ? ? ? ?for (int i = 0; i < 4; i++)
?? ? ? ? ? ?{
?? ? ? ? ? ? ? ?people peo = new people();
?? ? ? ? ? ? ? ?peo.name = "peo" + i.ToString();
?? ? ? ? ? ? ? ?peo.age = i;
?? ? ? ? ? ? ? ?sortedlist.Add(i.ToString(), peo);
?? ? ? ? ? ?}
?? ? ? ? ? ?var result = from u in sortedlist where u.Value.age != 0 select u.Value; ??
?? ? ? ? ? ? ?u的类型是KeyValuePair<string, people>
?? ? ? ? ? ?foreach (var item in result)
?? ? ? ? ? ?{
?? ? ? ? ? ? ? ?Label3.Text+=item.name;
?? ? ? ? ? ?}
?? ? ? ?}
泛型双向链表LinkedList<T>:
泛型双向链表表示双向链表,它通过当前元素可以直接访问该元素的前一个元素(如果存在)和后一个元素(如果存在)。元素类型是LinkedListNode<T>。如果LinkedList<T>为空,则其First和Last属性的值也为空。
?protected void Button4_Click(object sender, EventArgs e)
?? ? ? ?{
?? ? ? ? ? ?LinkedList<int> linkedlist = new LinkedList<int>();
?? ? ? ? ? ?linkedlist.AddFirst(0); ? ? ? ? ? 在开头处添加指定值的新元素
?? ? ? ? ? ?for (int i = 1; i < 5; i++)
?? ? ? ? ? ?{ ?Find()方法是找到第一个值是指定值的元素
?? ? ? ? ? ? ? ?AddAfter(0方法是在指定元素后面添加一个指定值的新元素
?? ? ? ? ? ? ? ?linkedlist.AddAfter(linkedlist.Find(i - 1), i);
?? ? ? ? ? ?}
?? ? ? ? ? ?var result = from u in linkedlist select u;
?? ? ? ? ? ?foreach (var item in result)
?? ? ? ? ? ?{
?? ? ? ? ? ? ? ?Label4.Text += item;
?? ? ? ? ? ?}
?? ? ? ?}