.NET Core中的Linq语句

为什么要学Linq?

当然为了让数据处理变得更简单,为了更加的人性化。

在了解Linq语句之前,我们通过委托到lambda来推出linq的基本语法

委托->Lambda->Linq

 static void Main(string[] args)
        {
            /*med m = new med(sum);
            int result = m(1, 2);
            Console.WriteLine(result);*/
            Func<int,int,int>  f= sum;//Func带返回值得泛型类型;前两个int是参数的类型,后面一个是方法sum的返回值类型
            Console.WriteLine(f(2, 3));

            Action a = F;//Action不带返回值的泛型类型;
            a();

            //匿名函数
            Func<int, int,int> s = delegate (int i, int n)
            {
                return i + n;
            };
            Console.WriteLine(s(5, 6));
            //lambada表达式  返回值只有一行代码的(可以删掉return和大括号)参数只有一个的时候(可以删掉小括号和参数类型)
            Func<int, int, int> m = (int i, int n) => i * n;
            Console.WriteLine(m(8, 9));

            Func<int, bool> zz = i => i > 0;

            Console.WriteLine(zz(3));
        }

输出结果:

5
wqfhqi
11
72
True

简单的Lambda表达式语句:(打印一个集合中大于10的数)

 static void Main(string[] args)
        {
            int[] num = new int[] {2,5,432,324,435,89 };
            //where方法会遍历集合中的每个元素,对于每个元素都调用
            //a => a>10这个表达式判断一下是否为true
            //如果为true,则把这个放到返回的集合中
            IEnumerable<int> result = num.Where(a => a > 10);
            foreach (int i in result) {
                Console.WriteLine($"{i}");
            }
        }

Lambda常用扩展方法:

先定义一个装载数据的类

 class Employee
    {
        public long Id { get; set; }
        public string Name { get; set; }//姓名
        public int Age { get; set; }//年龄
        public bool Gender { get; set; }//性别
        public int Salary { get; set; }//工资
        public override string ToString()
        {
            return $"Id={Id},Name={Name},Age={Age},Gender={Gender},Salary={Salary},";
        }
        static void Main(string[] args)
        {
            List<Employee> list = new List<Employee>();
            list.Add(new Employee { Id = 1, Name = "jerry", Age = 28, Gender = true, Salary = 5000 });
            list.Add(new Employee { Id = 2, Name = "jim", Age = 33, Gender = true, Salary = 3000 });
            list.Add(new Employee { Id = 3, Name = "lili", Age = 35, Gender = false, Salary = 9000 });
            list.Add(new Employee { Id = 4, Name = "lucy", Age = 16, Gender = false, Salary = 2000 });
            list.Add(new Employee { Id = 5, Name = "kimi", Age = 25, Gender = true, Salary = 1000 });
            list.Add(new Employee { Id = 6, Name = "nancy", Age = 35, Gender = false, Salary = 8000 });
        }
    }

(1)Count方法和Any方法(当你只想看到是否含有数据时,建议使用Any方法):

 //统计工资大于5000的人数
            Console.WriteLine(list.Count(a => a.Salary >= 5000));
            //统计性别为true且年龄大于25的人数
            Console.WriteLine(list.Count(a=>a.Gender = true && a.Age >25));

            //判断是否至少含有一条数据,返回结果为bool类型
            Console.WriteLine(list.Any(a => a.Salary > 9000));
            Console.WriteLine(list.Any(a => a.Salary < 9000));
返回结果:3
返回结果:4
返回结果:false
返回结果:true

(2)获取一条数据(是否带参数的两种写法)

//Single:有且只有一条满足要求的数据(没有数据或大于一条数据会抛异常)
            Employee e1 = list.Where(a => a.Name == "kimi").Single();
            Console.WriteLine(e1);

            //SingleOrDefault:最多只有一条满足要求的数据

            //First:至少有一条,返回第一条
            Employee e2 = list.First(a => a.Age > 30);
            Console.WriteLine(e2);

            //FirstOrDefault:返回第一条或者默认值
            Employee e3 = list.FirstOrDefault(a => a.Age > 40);
            Console.WriteLine(e3==null);

返回结果:
Id=5,Name=kimi,Age=25,Gender=True,Salary=1000,
Id=2,Name=jim,Age=33,Gender=True,Salary=3000,
True

(3)按年龄进行排序(默认升序)

OrderBy:


            IEnumerable<Employee> employees = list.OrderBy(a => a.Age);
            foreach (var i in employees) {
                Console.WriteLine(i);
            }
返回结果:
Id=4,Name=lucy,Age=16,Gender=False,Salary=2000,
Id=5,Name=kimi,Age=25,Gender=True,Salary=1000,
Id=1,Name=jerry,Age=28,Gender=True,Salary=5000,
Id=2,Name=jim,Age=33,Gender=True,Salary=3000,
Id=3,Name=lili,Age=35,Gender=False,Salary=9000,
Id=6,Name=nancy,Age=35,Gender=False,Salary=8000,

按年龄进行OrderByDescending(降序):


            IEnumerable<Employee> employees = list.OrderByDescending(a => a.Age);
            foreach (var i in employees) {
                Console.WriteLine(i);
            }
返回结果:
Id=3,Name=lili,Age=35,Gender=False,Salary=9000,
Id=6,Name=nancy,Age=35,Gender=False,Salary=8000,
Id=2,Name=jim,Age=33,Gender=True,Salary=3000,
Id=1,Name=jerry,Age=28,Gender=True,Salary=5000,
Id=5,Name=kimi,Age=25,Gender=True,Salary=1000,
Id=4,Name=lucy,Age=16,Gender=False,Salary=2000,

 OrderBy和ThenBy同时使用:

 //先根据年龄进行降序排列,当年龄相等的再进行工资的升序排列
 IEnumerable<Employee> e = list.OrderByDescending(a => a.Age).ThenBy(a=>a.Salary);
    foreach (var i in e) {
        Console.WriteLine(i);
            }
运行结果:
Id=6,Name=nancy,Age=35,Gender=False,Salary=8000,
Id=3,Name=lili,Age=35,Gender=False,Salary=9000,
Id=2,Name=jim,Age=33,Gender=True,Salary=3000,
Id=1,Name=jerry,Age=28,Gender=True,Salary=5000,
Id=5,Name=kimi,Age=25,Gender=True,Salary=1000,
Id=4,Name=lucy,Age=16,Gender=False,Salary=2000,

(4)GroupBy(分组):对年龄进行分组,通过select的映射,显示出想要呈现的数据

  var item1 = list.GroupBy(e => e.Age).Select(g => new
            {
                nianling = g.Key,
                maxs = g.Max(e => e.Salary),
                mins = g.Min(e => e.Salary),
                renshu = g.Count()
            });
            foreach (var i in item1)
            {
                Console.WriteLine(i.nianling + "," + i.maxs + "," + i.mins + "," + i.renshu);
            }
返回结果:

28,5000,5000,1
33,3000,3000,1
35,9000,8000,2
16,2000,2000,1
25,1000,1000,1

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
.NET Core实体框架(Entity Framework Core)是一个用于.NET Core平台的对象关系映射(ORM)框架,它提供了一种简化数据库访问和操作的方式。下面是对.NET Core实体框架的介绍: 1. 数据库上下文(DbContext):数据库上下文是.NET Core实体框架的核心组件之一,它表示与数据库的会话,并提供了对数据库的访问和操作。通过定义派生自DbContext的类,可以创建数据库上下文对象,并在其定义实体集和数据库表之间的映射关系。 2. 实体类(Entity Class):实体类是代表数据库表的.NET类。通过定义实体类,可以将数据库表的每一行数据映射到一个对象实例上。实体类通常包含属性来表示表的列,并且可以定义关系属性来表示表之间的关联关系。 3. 数据迁移(Data Migration):数据迁移是.NET Core实体框架的一个重要特性,它允许开发人员对数据库模式进行版本控制和管理。通过使用数据迁移,可以轻松地在应用程序的开发过程对数据库模式进行更改,并将这些更改应用到目标数据库。 4. LINQ查询(LINQ Query):.NET Core实体框架支持使用LINQ(Language Integrated Query)进行数据查询。通过使用LINQ查询,可以以面向对象的方式编写数据库查询语句,而无需直接编写SQL语句。 5. 数据库提供程序(Database Provider):.NET Core实体框架支持多种数据库提供程序,包括Microsoft SQL Server、MySQL、SQLite等。通过选择适当的数据库提供程序,可以与不同类型的数据库进行交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

捕不到月亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值