一、对信息进行排序
通过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.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; }
}
}
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();
}
}
}