EntityFramework数据持久化 Linq语法应用
Linq基础语法
LINQ概述
LINQ(Language Integrated Query,语言集成查询)提供了一种跨数据源和数据格式查询的统一模型。
LINQ的组成:
- LINQ To Objects:查询集合对象
- LINQ enabled ADO.NET:查询数据库
LINQ To DataSet
LINQ To SQL
LINQ To Entities -> EntityFramework - 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语法应用的更多相关文章
- EntityFramework数据持久化 Linq介绍
一.LINQ概述与查询语法 二.LINQ方法语法基础(重点) 三.LINQ聚合操作与元素操作(重点) 四.数据类型转换(重点) 一.LINQ概述与查询语法 1.LINQ(Language Integr ...
- Linq To Sql中实现Left Join与Inner Join使用Linq语法与lambda表达式
当前有两个表,sgroup与sgroupuser,两者通过gKey关联,而sgroup表记录的是组,而sgroupuser记录是组中的用户,因此在sgroupuser中不一定有数据.需要使用Left ...
- MVC之实体框架(数据持久化框架)EntityFrameWork(EF)
EF - EntityFrameWork 中文名:实体框架(数据持久化框架) 1.使用EF查询(Linq to EF) 1.1使用标准查询运算符来查询 OumindBlogEntities db = ...
- vue render函数使用jsx语法 可以使用v-model语法 vuex实现数据持久化
render函数使用jsx语法: 安装插件 transform-vue-jsx 可以使用v-model语法安装插件 jsx-v-model .babelrc文件配置: vuex实现数据持久化 安装插 ...
- Mongodb C#客户端数据关联数据,使用Linq语法进行关联
在Mongodb C# drivers 文档 官方地址:https://docs.mongodb.com/ecosystem/drivers/csharp/ 基础的使用请参考<c# Mongod ...
- Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解
返回<8天掌握EF的Code First开发>总目录 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to ...
- 【开源】OSharp框架解说系列(5.1):EntityFramework数据层设计
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- iOS 数据持久化(扩展知识:模糊背景效果和密码保护功能)
本篇随笔除了介绍 iOS 数据持久化知识之外,还贯穿了以下内容: (1)自定义 TableView,结合 block 从 ViewController 中分离出 View,轻 ViewControll ...
- Linq语法详细
闲言碎语 近期比较忙,但还是想写点什么,就分享一些基础的知识给大家看吧,希望能帮助一些linq新手,如果有其它疑问,可以进右上角群,进行交流探讨,谢谢. 开门见山 读这篇文章之前,我先说下,每一种搜索 ...
随机推荐
- SpringCloud (一) :微服务架构
什么是微服务架构 简而言之,微服务架构风格就是将单一应用的开发分为多个小的服务,每个小的服务在自己的进程中运行并使用轻量级机制进行通信(通常是一个HTTP API源),这些服务围绕业务性能进行构建,并 ...
- 【Spark】SparkStreaming和Kafka的整合
文章目录 Streaming和Kafka整合 概述 使用0.8版本下Receiver DStream接收数据进行消费 步骤 一.启动Kafka集群 二.创建maven工程,导入jar包 三.创建一个k ...
- ASP.NET Core中结合枚举和资源文件显示列表
模型类的某些属性以枚举形式出现,我们希望在打开编辑表单时在选择列表中显示枚举值.有时我们想要枚举元素名称,但有时我们想要使用自定义名称甚至翻译. 这个例子演示了如何获取枚举元素名称以选择ASP.NET ...
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
堆和栈的区别 一个由C/C++编译的程序占用的内存分为以下几个部分1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2.堆区(heap ...
- python --集合set的学习
集合是一个无序的不重复的元素序列,一般我们使用set(value)函数来创建集合. 如下: 定义以及添加元素,以及注意点如下: 再如下:
- android 防止多次点击,导致事件监听响应到其他界面
下面有个案例: A点击的时候就跳转到B界面,点击B界面后结束,返回到A界面中 1.此时在B界面中,设置点击事件,点击后结束B v.setOnClickListener(new OnClickListe ...
- python之模块、类、对象
模块就像字典 字典是python中唯一映射关系,它用一个事物对应另外一个事物,也就是所谓的key->value. 模块包含一些变量和函数,可以导入,并且可以用点(·)来操作访问变量和函数. 记住 ...
- SpringMvc上传图片及表单提交(单文件+实体类参数提交)
前两天做项目用到了Springmvc的文件上传来上传图片,由于和这个普通的Java文件上传处理流程不太一样,所以做的时候碰了壁,一顿百度,博客,要不就是一部分代码,要不就是看不懂,用不会的代码,下面来 ...
- 3.9 Go Slice切片
3.9 Go Slice切片 Go语言切片(Slice) 切片是可动态变化的序列,是对数组的引用,引用类型,遵循引用传递的机制 slice类型写作[ ]T,T是slice元素类型,var s1 []i ...
- 使用php+mysql+xml完成一个调查问卷
本人根据php典型模块与项目实战大全此书所完成的一个调查问卷,同时管理员可以进行修改调查内容 同时用到了一个css文件,借鉴于 http://www.wufangbo.com/div-css-vote ...