聚合类
Count、Max/Min、Average
直接通过代码进行演示
static void Main(string[] args)
{
Student obj1 = new Student() { StuId = 1001, StuName = "学生1" };
Student obj2 = new Student() { StuId = 1002, StuName = "学生2" };
Student obj3 = new Student() { StuId = 1003, StuName = "学生3" };
Student obj4 = new Student() { StuId = 1004, StuName = "学生4" };
Student obj5 = new Student() { StuId = 1005, StuName = "学生5" };
Student obj6 = new Student() { StuId = 1006, StuName = "学生6" };
List<Student> stuList = new List<ConsoleApplication1.Student>() { obj1, obj2, obj3, obj4, obj5, obj6 };
//混合模式
var count = (from c in stuList
where c.StuId > 1004
select c).Count();
//查询方法
var count1 = stuList.Where(c => c.StuId > 1004).Count();
var max = (from c in stuList
select c.StuId).Max();
var min = (from c in stuList
select c.StuId).Min();
var average = (from c in stuList
select c.StuId).Average();
var sum = (from c in stuList
select c.StuId).Sum();
Console.WriteLine("count=" + count + " count1=" + count1 + " max=" + max + " min=" + min + " average=" + average + " sum=" + sum);
Console.ReadKey();
}
结果:
排序类
ThanBy
下面用两种方式来实现排序,经过测试后结果相同
static void Main(string[] args)
{
Student obj1 = new Student() { StuId = 1001, StuName = "学生1" };
Student obj2 = new Student() { StuId = 1005, StuName = "学生2" };
Student obj3 = new Student() { StuId = 1007, StuName = "学生3" };
Student obj4 = new Student() { StuId = 1002, StuName = "学生4" };
Student obj5 = new Student() { StuId = 1003, StuName = "学生5" };
Student obj6 = new Student() { StuId = 1002, StuName = "学生6" };
List<Student> stuList = new List<ConsoleApplication1.Student>() { obj1, obj2, obj3, obj4, obj5, obj6 };
var stus1 = from s in stuList
orderby s.StuId,s.StuName
select s;
var stus2 = stuList.OrderBy(s => s.StuId)
.ThenBy(s => s.StuName)
.Select(s => s);
foreach(var s in stus1)
{
Console.WriteLine(s.StuName);
}
Console.WriteLine("--------------------");
foreach (var s in stus2)
{
Console.WriteLine(s.StuName);
}
Console.ReadKey();
分区类查询
Take、Skip、TakeWhile、SkipWhile
Take 提取指定数量的项
Skip 跳过指定数量的项并获取剩余的项
TakeWhile 只有满足指定的条件,就会返回序列的元素,然后跳过剩余的元素
SkipWhile 只有满足指定的条件,就跳过序列中的元素,然后返回剩余元素
示例:
static void Main(string[] args)
{
int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var list1 = nums.Skip(1).Take(3);
var list2 = nums.SkipWhile(i => i % 3 != 0).TakeWhile(i => i % 2 != 0);
foreach (var item in list1) { Console.WriteLine(item); }
Console.WriteLine("-------------");
foreach (var item in list2) { Console.WriteLine(item); }
Console.ReadLine();
}
结果:
集合类查询
Distinct
去掉集合中的重复项
示例:
static void Main(string[] args)
{
int[] nums = { 1, 3, 3, 4, 3, 6, 7, 8, 8 };
var list1 = nums.Distinct();
foreach (var item in list1) { Console.WriteLine(item); }
Console.ReadLine();
}
结果:
生成类查询
Range、Repeat
Range生成一个整数序列
Repeat生成一个重复项的序列(产生泛型序列)
示例:
static void Main(string[] args)
{
var nums1 = Enumerable.Range(1, 10);
var nums2 = Enumerable.Repeat("LINQ",5);
foreach (var item in nums1) { Console.WriteLine(item); }
Console.WriteLine("------------------------");
foreach (var item in nums2) { Console.WriteLine(item); }
Console.ReadLine();
}
结果: