对查询出的数据进行排序和分组

一、对信息进行排序
     通过orderby关键字,LINQ可以实现升序和降序排列。LINQ还支持次要排序(也可以按升序和降序排列),只要将需要排序的项用逗号隔开即可。
      在一个集合上调用Reverse扩展方法即可翻转该集合中的元素。
     .NET 3.5中引入的扩展方法:OrderBy、OrderByDescending、ThenBy、ThenByDescending以及Reverse。这些方法扩展了Enumerable和Queryable。


1.1 按升序和降序排序
using System;
using System.Linq; namespace 按升序和降序排列 {     class Program     {         static void Main(string[] args)         {             string quote = "most people like a soft peopele,howere,nitem   etaijain,hahahh.";             //StringSplitOptions:指定适用的 Overload:System.String.Split 方法重载包含还是省略返回值中的空子字符串。             string[] words = quote.Split(new char[] { ' ', ',', '.' },StringSplitOptions.RemoveEmptyEntries);             var sorted = (from s in words orderby s select s);//生成的类型:IEnumerable             var sort = from s in words.OrderByDescending(s => s) select s;             Console.WriteLine("*************************************************");             Array.ForEach(sort.ToArray(), s => Console.Write(s + "  "));             var sortDescend = (from s in words orderby s descending select s);             Console.WriteLine();             Console.WriteLine("**********************升序***************************");             Console.WriteLine(sorted.GetType());             foreach (var s in sorted)             {                 Console.Write(s + "  ");             }             Console.WriteLine();             Console.WriteLine("********************降序*****************************");             Console.WriteLine(sortDescend.GetType());             foreach (var s in sortDescend)             {                 Console.Write(s + "  ");             }             Console.ReadKey();         }     } }

对查询出的数据进行排序和分组_第1张图片

1.2 执行次要排序
   主要排序是指orderby子句的第一个字段或谓词。次要排序,从扩展方法的角度来讲,其实就是ThenBy扩展方法。而对于LINQ来讲,其实就是一个逗号分割的列表;orderby子句中,第一个项之后的所有项都是一个次要排序规则。
 
  
using System;
using System.Linq;

namespace 执行次要排序
{
    class Program
    {
        static void Main(string[] args)
        {
            var person = new []
            {
                new {Name="xushuai",Sex='男',Age=23 },
                new {Name="zhudapang",Sex='男',Age=23 },
                new {Name="ha",Sex='女',Age=24 },
                new {Name="ha",Sex='女',Age=25 },
                new {Name="ha",Sex='男',Age=23 }
            };
            var sorted = from p in person orderby p.Name, p.Age select p;
            var sort = person.OrderBy(p => p.Name).ThenBy(p => p.Age);
            foreach (var p in sorted)
                Console.WriteLine(p);
            Console.WriteLine("*****************************************");
            foreach (var p in sort)
                Console.WriteLine(p);
            Console.ReadKey(); 
        }
    }
    public class Person
    {
        public string Name { get; set; }
        public char Sex { get; set; }
        public int Age { get; set; }
    }
}
对查询出的数据进行排序和分组_第2张图片
1.3  翻转元素顺序翻转功能就是改变一个集合的顺序。LINQ中没有reverse关键字,因此只能调用扩展方法。
二、对信息进行分组     
       在LINQ中,分组功能是通过group by子句实现的。  
using System;
using System.Linq;

namespace 将一组整数分组成奇数和偶数序列
{
    class Program
    {
        static void Main(string[] args)
        {
            var numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,43,23,54,123,45345,65};
            var result = from n in numbers group n by n % 2;

            Array.ForEach(result.ToArray(), x =>
            {
                Console.WriteLine(x.Key == 0 ? "evens:" : "odds");
                Array.ForEach(x.ToArray(), y => Console.Write(y+"  "));
                Console.WriteLine();
            });
            Console.ReadKey();
        }
    }
}


你可能感兴趣的:(LINQ)