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("编号\t姓名\t语文\t数学\t英语\t综合");
foreach (var item in data1)
{
Console.WriteLine($"{item.Id}\t{item.Name}\t{item.Scores.Chinese}\t{item.Scores.Maths}\t{item.Scores.EngLish}\t{item.Scores.Comprehensive}");
}

结果展示



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

EntityFramework数据持久化 Linq语法应用的更多相关文章

  1. EntityFramework数据持久化 Linq介绍

    一.LINQ概述与查询语法 二.LINQ方法语法基础(重点) 三.LINQ聚合操作与元素操作(重点) 四.数据类型转换(重点) 一.LINQ概述与查询语法 1.LINQ(Language Integr ...

  2. Linq To Sql中实现Left Join与Inner Join使用Linq语法与lambda表达式

    当前有两个表,sgroup与sgroupuser,两者通过gKey关联,而sgroup表记录的是组,而sgroupuser记录是组中的用户,因此在sgroupuser中不一定有数据.需要使用Left ...

  3. MVC之实体框架(数据持久化框架)EntityFrameWork(EF)

    EF - EntityFrameWork 中文名:实体框架(数据持久化框架) 1.使用EF查询(Linq to EF) 1.1使用标准查询运算符来查询 OumindBlogEntities db = ...

  4. vue render函数使用jsx语法 可以使用v-model语法 vuex实现数据持久化

    render函数使用jsx语法: 安装插件  transform-vue-jsx 可以使用v-model语法安装插件 jsx-v-model .babelrc文件配置: vuex实现数据持久化 安装插 ...

  5. Mongodb C#客户端数据关联数据,使用Linq语法进行关联

    在Mongodb C# drivers 文档 官方地址:https://docs.mongodb.com/ecosystem/drivers/csharp/ 基础的使用请参考<c# Mongod ...

  6. Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解

    返回<8天掌握EF的Code First开发>总目录 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to ...

  7. 【开源】OSharp框架解说系列(5.1):EntityFramework数据层设计

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  8. iOS 数据持久化(扩展知识:模糊背景效果和密码保护功能)

    本篇随笔除了介绍 iOS 数据持久化知识之外,还贯穿了以下内容: (1)自定义 TableView,结合 block 从 ViewController 中分离出 View,轻 ViewControll ...

  9. Linq语法详细

    闲言碎语 近期比较忙,但还是想写点什么,就分享一些基础的知识给大家看吧,希望能帮助一些linq新手,如果有其它疑问,可以进右上角群,进行交流探讨,谢谢. 开门见山 读这篇文章之前,我先说下,每一种搜索 ...

随机推荐

  1. 12_JavaScript基础入门(2)

    运算符 运算符(Operators,也翻译为操作符),是发起运算的最简单形式. 运算符的分类见仁见智,我们的课程对运算符进行如下分类: 数学运算符(Arithmetic operators)      ...

  2. 【FreeRTOS学习01】CubeIDE快速整合FreeRTOS创建第一个任务

    整个专栏主要是博主结合自身对FreeRTOS的实战学习以及源码分析,基于STM32F767 Nucleo-144平台,在CubeIDE下进行开发,结合官方的HAL库,将硬件环节的问题减少到最小,将精力 ...

  3. 用VirtualBox代替VMWare安装Ubuntu系统图文教程总结

    文章目录 为什么使用VirtualBox,而不是VMWare? 图文教程 安装VirtualBox 下载Ubuntu镜像 新建虚拟机 安装Ubuntu系统 总结 为什么使用VirtualBox,而不是 ...

  4. Mysql常用sql语句(14)- 多表查询

    测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...

  5. 手写一个简易的多周期 MIPS CPU

    一点前言 多周期 CPU 相比单周期 CPU 以及流水线 CPU 实现来说其实写起来要麻烦那么一些,但是相对于流水线 CPU 和单周期 CPU 而言,多周期 CPU 除了能提升主频之外似乎并没有什么卵 ...

  6. PMS学习

    一,PMS的adb相关重要指令 1,adb shell dumpsys package(dump所有的系统内apk信息) 2,adb shell dumpsys package “com.androi ...

  7. 自动配置的Springboot内junit测试单元不能运行

    解决测试单元不能运行 问题:测试单元的 @Test 前面没有运行图标 解决 IDEA内:File - Setting - Plugins:搜到JUnitGenerator2.0,安装,重启IDEA 光 ...

  8. PAT 1002 A+B for Polynomials (25分)

    题目 This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: E ...

  9. Windows 系统如何安装 Docker

    1 docker 是基于 unix 开发的系列工具,所以在 windows 上安装 docker 非常容易出现环境不兼容的问题. 如果 windows 版本是 pro,一般是可以直接安装 docker ...

  10. python实现摇骰子猜大小函数升级没把加注及三大运行商短信验证过滤

    摇骰子游戏升级 此次更改增加下注功能,启动资金1000元,每次赔率都是一倍,钱输光退出. 源码: #!/user/bin/env python #-*-coding:utf-8 -*- #Author ...