ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#中Linq及扩展方法的简单使用

2022-07-15 19:03:11  阅读:168  来源: 互联网

标签:em C# 扩展 Linq DepartmentId var new EmployeeName emps


一、简介

  简单记录一下Linq以及其扩展方法的使用

二、准备工作

  准备好一个Employee类和Department类

 public class Employee
    {
        public int EmployeeId { get; set; }
        public string EmployeeName { get; set; }
        public int EmployeeAge { get; set; }
        public decimal Salary { get; set; }
        public int DepartmentId { get; set; }
    }

    public class Department
    {
        public int DepartmentId { get; set; }
        public string DepartmentName { get; set; }
    }

  构造数据

List<Employee> Employees = new()
{
    new Employee() { EmployeeName = "机智的小明", DepartmentId = 1, EmployeeAge = 20, EmployeeId = 1, Salary = 15000 },
    new Employee() { EmployeeName = "懒惰的小杨", DepartmentId = 2, EmployeeAge = 20, EmployeeId = 2, Salary = 15000 },
    new Employee() { EmployeeName = "勤劳的小王", DepartmentId = 1, EmployeeAge = 25, EmployeeId = 3, Salary = 15000 },
    new Employee() { EmployeeName = "风雅的小张", DepartmentId = 2, EmployeeAge = 26, EmployeeId = 4, Salary = 15000 },
    new Employee() { EmployeeName = "睿智的小华", DepartmentId = 1, EmployeeAge = 30, EmployeeId = 5, Salary = 15000 },
    new Employee() { EmployeeName = "欧阳峰", DepartmentId = 3, EmployeeAge = 40, EmployeeId = 6, Salary = 15000 },
    new Employee() { EmployeeName = "慕容复", DepartmentId = 3, EmployeeAge = 30, EmployeeId = 7, Salary = 15000 },
};

List<Department> Departments = new()
{
    new Department() { DepartmentId = 1, DepartmentName = "研发部" },
    new Department() { DepartmentId = 2, DepartmentName = "测试部" },
    new Department() { DepartmentId = 3, DepartmentName = "技术支持部" },

};

三、Linq的使用

  3.1 查询所有数据

 var emps = from em in Employees
               select em;
    foreach (var em in emps)
    {
        Console.WriteLine(em.EmployeeName);
    }

  3.2 模糊查询 查询名字中包含小的员工

var emps = from em in Employees
               where em.EmployeeName.Contains('小')
               select em;
    foreach (var em in emps)
    {
        Console.WriteLine(em.EmployeeName);
    }

  3.3 分组查询 按照部门编号分组,筛选条件:编号大于1

var emps = from em in Employees
           where em.DepartmentId > 1
           group em by em.DepartmentId;
foreach (var em in emps)
{
    Console.WriteLine("部门编号:" + em.Key);
    foreach (var item in em)
    {
        Console.WriteLine(item.EmployeeName);
    }
}

  3.4 联合查询 输出员工及其所在的部门

var emps = from em in Employees
           join dpt in Departments
           on em.EmployeeId equals dpt.DepartmentId
           orderby em.EmployeeId descending   //按照员工编号降序
           select new { em.EmployeeId, em.EmployeeName, dpt.DepartmentName } ;
foreach (var em in emps)
{
    Console.WriteLine("编号:" + em.EmployeeId + " 姓名:" + em.EmployeeName + " 部门:" + em.DepartmentName);

}

四、扩展方法

  4.1 所有员工部门编号是否都是1

bool falg = Employees.All(x => x.DepartmentId == 1);

  4.2 是否有员工的部门编号为1

bool  falg = Employees.Any(x => x.DepartmentId == 1);

  4.3 查找部门编号为1的第一个员工

var em = Employees.FirstOrDefault(x => x.DepartmentId == 1);

  4.4 计算部门编号为1的员工人数

long num = Employees.LongCount(x => x.DepartmentId == 1);

  4.5 组合两个集合

var ems = Employees.Zip(Departments, (first, second) =>  
{
    if (first.DepartmentId == second.DepartmentId)
        return first.EmployeeName + second.DepartmentName;
    else
        return first.EmployeeName;
});
foreach (var em in ems)
{
    Console.WriteLine(em);
}

输出结果:

机智的小明研发部 懒惰的小杨测试部 勤劳的小王

  4.6 分组查询

var emps = Employees.GroupBy(x => x.DepartmentId).Where(x => x.Key > 1);
foreach (var em in emps)
{
    Console.WriteLine("部门编号:" + em.Key);
    foreach (var item in em)
    {
        Console.WriteLine(item.EmployeeName);
    }
}

  4.7 联合查询

var emps = Employees.Join(Departments,
        em => em.DepartmentId,
        dpt => dpt.DepartmentId,
        (em, dpt) => new { em.EmployeeName, dpt.DepartmentName });
    foreach (var em in emps)
    {
        Console.WriteLine(em.EmployeeName + em.DepartmentName);
    }

 

标签:em,C#,扩展,Linq,DepartmentId,var,new,EmployeeName,emps
来源: https://www.cnblogs.com/just-like/p/16482501.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有