LINQ

作者: 山猪打不过家猪 | 来源:发表于2022-10-18 15:19 被阅读0次

1.推断类型var关键字

var可以根据变量的初始值自动推断局部变量的类型


image.png

2.匿名类的 使用

class Program
{
    static void Main(string[] args)
    {
        //创建一个学员对象
        Student stu1 = new Student(1001, "fxx1");
        //通过匿名类创建一个学院
        var ojbStudent = new
        {
            Name = "fxx",
            Age = 18,
            ClassName = "WEB"
        };
        Console.WriteLine("姓名{0},年龄{1},班级{2}", ojbStudent.Name, ojbStudent.Age, ojbStudent.ClassName);

    }
}

3.简单扩展方法的应用

image.png
image.png

ExtendMethod.cs

namespace ConsoleApp1
{
    /// <summary>
    /// 扩展方法必须是静态类
    /// </summary>
    static class ExtendMethod
    {
        public static int GetAvg(this int num)
        {
            return num / 5;
        }
        public static string GetStudentInfo(this string stuInfo)
        {
            return $"我的学生名字是:{stuInfo}";
        }
    }
}

Program.cs

static void Main(string[] args)
{
    string stuName = "fxx";
    Console.WriteLine(stuName.GetStudentInfo());
}
  • 为密封类Student添加扩展方法
static void Main(string[] args)
{
    Student fxx = new Student();
    fxx.StuName = "fxx";
    Console.WriteLine(fxx.ShowStuInfo());
}

Student.cs

namespace ConsoleApp1
{
    sealed class Student
    {
        public Student() { }
        public Student(int id,string stuNam)
        {
            this.Id = id;
            this.StuName = stuNam;
        }
        public int Id { get; set; }
        public string StuName { get; set; }
    }
}

4. 委托的基本使用

image.png
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //【3】创建委托对象
            CalculatorDelegate objCal = new CalculatorDelegate(Add);
            //【4】通过委托调用方法, 而不是使用方法直接调用
            int result = objCal(10, 20);
            Console.WriteLine(result);
            //【5】断开当前委托关联的方法
            objCal -= Add;
            //【6】重新委托
            objCal += Sub;
            int result2 = objCal(10, 5);
            Console.WriteLine(result2);
        }
        //【2】根据委托定义具体方法
        static int Add(int a, int b)
        {
            return a + b;
        }
        static int Sub(int a, int b)
        {
            return a - b;
        }
    }
    //【1】声明委托(定义一个函数的原型:返回值+参数类型的个数)
    public delegate int CalculatorDelegate(int a, int b);
}

5.匿名方法和匿名函数Lambda

image.png
  • 匿名方法
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            CalculatorDelegate objCal = delegate (int a, int b)
            {
                return a + b;
            };

            int result = objCal(10, 20);
            Console.WriteLine(result);
        }
    }
    //【1】声明委托(定义一个函数的原型:返回值+参数类型的个数)
    public delegate int CalculatorDelegate(int a, int b);
}
  • Lamba表达式


    image.png

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            CalculatorDelegate objCal = (a, b) => { return a + b; };
            int result = objCal(10, 20);
            Console.WriteLine(result);
        }
    }
    //【1】声明委托(定义一个函数的原型:返回值+参数类型的个数)
    public delegate int CalculatorDelegate(int a, int b);
}

  • 如果定义一个参数,则可以简写
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            CalculatorDelegate objCal = a => a * a;
            int result = objCal(10);
            Console.WriteLine(result);
        }
    }
    //【1】声明委托(定义一个函数的原型:返回值+参数类型的个数)
    public delegate int CalculatorDelegate(int a);
}

6.LINQ查询语句和方法

image.png
  • 使用LINQ
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,13,20};
            //使用LINQ
            var list = from num in nums
                       where num % 2 != 0
                       orderby num descending
                       select num;
            foreach (int item in list)
            {
                Console.WriteLine(item);
            }
        }
    }
}

7.LINQ查询方法

7.1 select()
image.png
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,13,20 };
            var list = nums.Select(item => item * 2);
            foreach (int item in list)
            {
                Console.WriteLine(item);
            }
        }
    }
}

7.2 where()
image.png
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] nums = { 1, 40, 20, 4, 13};
            var list = nums.Where(item => item % 2==0).Select(i=>i*i).OrderBy(item=>item);
            foreach (int item in list)
            {
                Console.WriteLine(item);
            }
        }
    }
}
>>>
16
400
1600
  • 例2
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] nums = { "fxx", "艾热","王以太","PGone","aa","bb"};
            var list = nums.Where(item => item.Length == 2).Select(item => item).OrderByDescending(item=>item.Substring(0,1));
            foreach (string item in list)
            {
                Console.WriteLine(item);
            }

        }
    }
}
>>>
艾热
bb
aa
7.3 GroupBy()
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] nums = { "fxx", "艾热","王以太","PGone","bs","bb","艾滋"};
            var list = nums.Where(item => item.Length == 2).Select(item => item).GroupBy(item=>item.Substring(0,1));
            foreach (var item in list)
            {
                Console.WriteLine("***********");
                Console.WriteLine($"分组的字段是:{item.Key}");
                foreach (var i in item)
                {
                    Console.WriteLine(i);
                }
            }
        }
    }
}
>>>
***********
分组的字段是:艾
艾热
艾滋
***********
分组的字段是:b
bs
bb

8.LINQ的查询时机

image.png
  • Count()立即执行
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] nums = { 1, 2, 3, 4, 5, 6, 7 };
            var list = nums.Where(item => item % 2 == 0).Select(item => item).Count();
            Console.WriteLine(list.ToString());
        }
    }
}
>>>
3 

9.LINQ 的两种查询形式

image.png

10. LINQ 子句

image.png
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Student stu1 = new Student() { StuName = "fxx", ScoreList = new List<int>() { 80, 91, 44 } };
            Student stu2 = new Student() { StuName = "axx", ScoreList = new List<int>() { 80, 50, 44 } };
            Student stu3 = new Student() { StuName = "bxx", ScoreList = new List<int>() { 80, 55, 98 } };

            //封装到集合
            List<Student> StuList = new List<Student> { stu1, stu2, stu3 };
            //查询成绩中有95分以上的学员
            var result = from stu in StuList
                         from score in stu.ScoreList
                         where score > 90
                         select stu;
            foreach (var item in result)
            {
                Console.WriteLine($"有分数大于90的学员姓名是:{item.StuName}");
            }
        }
    }
}
  • 两个数据源的联合查询


    image.png
    image.png

11.高级查询方法

image.png
image.png
image.png
image.png
image.png
image.png

相关文章

  • LINQ

    什么是linq? linq是语言集成查询。 linq主要包含三部分 linq to xml linq to obj...

  • Linq用法笔记

    一、什么是Linq? LINQ即Language Integrated Query(语言集成查询),LINQ是集成...

  • Lession12-LINQ

    LINQ简介 编写一个扩展方法 LINQ查询方法 LINQ查询的延迟加载 Linq标准查询操作符 LinqToXML

  • LINQ入门

    linq是语言集成查询。 linq to object :面向对象的查询。 linq to xml:针对xml查询...

  • (转).NET面试题系列[14] - LINQ to SQL与I

    LINQ to Object和LINQ to SQL有何区别? LINQ to SQL可以将查询表达式转换为SQL...

  • linq语句

    https://www.yiibai.com/linq/linq_filtering_operators.html...

  • EF Core 备忘

    模糊查询sql linq 内连接查询sql linq 左连接查询sql linq 左连接查询(连接内带条件)sql...

  • 四.SolidWorks 开发之Linq初探

    SolidWorks开发之Linq初探 一.何为Linq 语言集成查询(英语:Language Integrate...

  • Lambad 和Linq多表连查

    Lamdad Linq

  • 在 UiPath 中使用 LINQ

    在《LINQ 让数据操作更简单》一文中,我简单地介绍了 LINQ 是什么,以及它可以做什么。总的来说,LINQ 是...

网友评论

      本文标题:LINQ

      本文链接:https://www.haomeiwen.com/subject/roajzrtx.html