zoukankan      html  css  js  c++  java
  • EntityFramework数据持久化 Linq语法应用

    Linq基础语法

    LINQ概述

    LINQ(Language Integrated Query,语言集成查询)提供了一种跨数据源和数据格式查询的统一模型。

    LINQ的组成:

    1. LINQ To Objects:查询集合对象
    2. LINQ enabled ADO.NET:查询数据库
       LINQ To DataSet
       LINQ To SQL
       LINQ To Entities -> EntityFramework
    3. LINQ To XML:查询XML文档

    LINQ的语法:
    from [type] id in source
    [join [type] id in source on expr equals expr [into subGroup]]
    [from [type] id in source | let id = expr | where condition]
    [orderby ordering,ordering,ordering…]
    select expr | group expr by key
    [into id query]
    注意:只有实现了IEnumerable接口的数据源,才能执行相关的LINQ操作

    LINQ方法语法基础
    1、方法语法的是通过扩展方法和Lambda表达式来创建查询。
    查询语法和方法语法在语义上是相同的,但是大多数情况下发现查询语法更简单且更易于阅读;并且某些查询必须表示为方法调用(比如聚合操作)。

    看上述概念大家可能有点不懂什么意思,下面我们用两个简单的案例来进行分析。

    首先我们先来三个常用扩展方法, Where(筛选操作)、OrderBy(排序操作)、Select(投影操作)

    StubentIfo类

    //StubentIfo类
    class StubentIfo
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Sex  { get; set; }
            public int Age { get; set; }
            public string Address { get; set; }
            public string Phone { get; set; }
            public string Email { get; set; }
        }
    

    初始化数据

    //初始化数据
                List<StubentIfo> list = new List<StubentIfo>();
                list.Add(new StubentIfo{Id = 1,Name="张三", Sex="男", Age=38, Address="唐山", Email="111", Phone="165412164321" });
                list.Add(new StubentIfo{Id = 2, Name = "张4", Sex = "女", Age = 17, Address = "唐山", Email = "111", Phone = "7355165123431" });
                list.Add(new StubentIfo{ Id = 3, Name = "张5", Sex = "女", Age = 18, Address = "唐山", Email = "111", Phone = "165412164321"});
                list.Add(new StubentIfo{ Id = 4, Name = "张6", Sex = "男", Age = 88,  Address = "唐山", Email = "111", Phone = "564354631521" });
                list.Add(new StubentIfo{ Id = 5, Name = "张7", Sex = "男", Age = 48, Address = "唐山", Email = "111", Phone = "87123412035" });
    

    案例的数据在已经创建好了,下面我们来进行我们的第一个小练习。

    例1

    在以上数据中筛选出女性用户、并按用户的年龄进行排序。

    var lianxi2 = from x in list //数据源
                 where x.Sex == "女" //判断条件
                 orderby x.Age descending //排序
                 select x; 
                 //foreach 循环lianxi2,输出结果
    foreach (var item in lianxi2)
    {
         Console.WriteLine($"编号:{item.Id} 姓名:{item.Name} 性别:{item.Sex} 年龄:{item.Age} 地址:{item.Address} 邮箱:{item.Email} 电话:{item.Phone} ");
    }
    

    展示
    在这里插入图片描述

    例2

    查询最高的文综成绩,并将文科学生按照文综成绩降序排列输出

    Student类和Score类

     	class Student
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public bool Arts { get; set; }//是否是文科
            public Score Scores { get; set; }//成绩类
        }
        /// <summary>
        /// 成绩
        /// </summary>
    
         class Score
        {
            public int Chinese { get; set; }
            public int Maths { get; set; }
            public int EngLish { get; set; }
            public int Comprehensive { get; set; } //总成绩
    
        }
    

    数据添加

    static List<Student> students = new List<Student>()
            {
                new Student{Id=1,Name="张1",Arts=false, Scores=new Score{Chinese=127,Maths=145,EngLish=122,Comprehensive=289}},
                new Student{Id=2,Name="张2",Arts=true, Scores=new Score{Chinese=103,Maths=145,EngLish=122,Comprehensive=250}},
                new Student{Id=3,Name="张3",Arts=true, Scores=new Score{Chinese=136,Maths=102,EngLish=122,Comprehensive=189}},
                new Student{Id=4,Name="张4",Arts=true, Scores=new Score{Chinese=126,Maths=145,EngLish=140,Comprehensive=238}},
            };
    

    查询语句

    			var data = students.Where(s => s.Arts == true).Max(s=>s.Scores.Comprehensive);
                var data1 = students.Where(s => s.Arts == true).OrderByDescending(s => s.Scores.Comprehensive);
                Console.WriteLine("最高的文综成绩:"+data);
                Console.WriteLine("按照文综成绩降序排列如下:");
                Console.WriteLine("编号	姓名	语文	数学	英语	综合");
                foreach (var item in data1)
                {
                    Console.WriteLine($"{item.Id}	{item.Name}	{item.Scores.Chinese}	{item.Scores.Maths}	{item.Scores.EngLish}	{item.Scores.Comprehensive}");
                }
    

    结果展示
    在这里插入图片描述
    从上述案例可以看出Linq查询的两种方式基础代码不多,且非常好用,可以在开发是按自己的需求来进行选择。

  • 相关阅读:
    使用Beetle实现http代理服务
    Socket Tcp服务吞吐测试工具
    实现高性能稳定的socket tcp通讯经验分享
    Silverlight自定义按钮模板
    值得研究的 工作流 开源项目
    值得研究的 开源数据库
    值得研究的 创建PDF 组件
    值得研究的 开源图形引擎
    通用的NTier模型合理么?
    值得研究的 RSS阅读器
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946871.html
Copyright © 2011-2022 走看看