C#扩展方法 Where Any Count Signal SignalOrDefault First 等方法的使用

发布时间 2023-07-04 00:34:46作者: 流浪のwolf
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Runtime.ExceptionServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;


// 命名空间
namespace pro01
{
    //
    internal class Program
    {
        // main 方法
         static void Main(string[] args)
        {
            // LINQ 常用的扩展方法 IEnumerable<T> 扩展方法
            // 数组 List 集合,Dictionary 字典,都是实现 IEnumerable 接口的扩展方法
            // 初始化数据
            List<Employee> list = new List<Employee>();  // 新建类型为 Employee 的集合数据
            list.Add(new Employee {Id = 1,Name = "AAA",Age = 10,Gender = true ,Salary = 1000 });
            list.Add(new Employee {Id = 2,Name = "BBB",Age = 11,Gender = false ,Salary = 2000 });
            list.Add(new Employee { Id = 3,Name = "CCC",Age = 121,Gender = true ,Salary = 7000 });
            list.Add(new Employee { Id = 3,Name = "CCC",Age = 121,Gender = true ,Salary = 3000 });


            // 把 list 中 年龄等于 10 的筛选出来
            IEnumerable<Employee> items1 = list.Where(item => item.Age == 10);
            Console.WriteLine(items1);
            foreach (Employee z in items1)
            {
                Console.WriteLine(z);
            }


            // Count 打印 list 的个数
            int v = list.Count();
            Console.WriteLine($"list 的个数 {v}");


            // 筛选出id = 3 且 工资大于 5000 的数据
            IEnumerable<Employee> items2 = list.Where(row => row.Id == 3 && row.Salary > 5000);
            foreach (Employee j in items2)
            {
                Console.WriteLine("================================");
                Console.WriteLine(j);
            }


            // Any 判断集合中是否至少有一条数据满足条件 返回 true 或者 false 
            Console.WriteLine("================Any============");
            Console.WriteLine(list.Any(item => item.Id == 1));  // 集合是否包含 Id 为 1 的数据 true  
            Console.WriteLine(list.Any(item => item.Id == 100));  // false


            // signal 获取一条数据 
            // Single 有且只有一条满足要求的数据 返回 true   没有数据或者满足多条的数据就会报错
            //SignalOrDefault 最多只有一条满足要求的数据
            // First 至少有一条 返回第一条数据  返回第一条满足条件的数据
            // FirstOrDefault 返回第一条或者 默认值
            // list.Single();  // 序列包含一个以上的元素 包含多个满足条件的数据 所以报错
            List<Employee> list2 = new List<Employee>();
            list2.Add(new Employee { Id = 111, Name = "AAA", Age = 10, Gender = true, Salary = 1000 });
            //list2.Add(new Employee { Id = 222, Name = "AAA", Age = 10, Gender = true, Salary = 1000 });
            //var fg = list2.Where(ele => ele.Id == 111).Single();
            var fg = list2.Single();
            Console.WriteLine(fg);


            IEnumerable<Employee> item4 = list.Where(row => row.Id > 2 && row.Salary > 2000);
            Console.WriteLine("==========Single=============");
            foreach(Employee i in item4)
            {
                Console.WriteLine(i);
            }
            // Employee e4 = item4.Single();  // 序列包含一个以上的元素



            //Employee e1 =  list.Single(col => col.Id == 1);
            //Console.WriteLine("Signal", e1);


            Console.ReadLine();
        }
    }
}