EntityFramework数据持久化复习资料3、C#拓展方法与yield关键字使用
EntityFramework数据持久化复习资料3、C#拓展方法与yield关键字使用
目录
EntityFramework数据持久化复习资料3、C#拓展方法与yield关键字使用
前言
微软官方提供的ORM工具,ORM让开发人员节省数据库访问的代码时间,将更多的时间放到业务逻辑层代码上。开发人员使用Linq语言,对数据库操作如同操作Object对象 一样省事。EF有三种使用场景,1. 从数据库生成Class,2.由实体类生成数据库表结构,3.通过数据库可视化设计器设计数据库,同时生成实体类。 ORM (对象关系型映射)是将数据存储从域对象自动映射到关系型数据库的工具。ORM主要包括3个部分:域对象、关系数据库对象、映射关系。ORM使类提供自动化CRUD,使 开发人员从数据库API和SQL中解放出来。以前是使用ADO.NET来进行对数据库中得数据表进行操作,现在,使用ORM直接对对象进行操作,操作对象就等于操作数据库表, 那怎么让对象和数据库表一一对应起来?这个过程就是通过ORM框架来完成的,操作对象就是操作数据库也是通过ORM来完成的。ORM框架就是做对象和数据库的映射的。 那么EntityFramework的作用是什么? 我的理解就是大大简化数据库操作的,举个例子:在没有使用EF前,我们要编写复杂的SQL语句,而使用了EF之后,将会减少编写复杂的SQL语句过程。
开发环境
系统环境:win7及以上,本示例环境win11 开发工具:Visual Studio 2017及以上 创建项目: 控制台请创建【控制台应用(.NET Framework)】 Web请创建【ASP.NET Web应用程序(.NET Framework)】 数据库:SQLServer数据库2012及以上版本·如果下载最新版本,使用免费版本即可。
本地数据库链接:【.】或【127.0.0.1】 登陆方式1:【本地登陆】 登陆方式2:账号【sa】 pwd【admin】 测试数据库名称:【mytest】 排序规则:【Chinese_PRC_CI_AS】
C#拓展方法
扩展方法是允许使用实例方法的调用语法来调用静态方法的语言功能。
- 扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。
扩展方法的定义与调用:
- 定义包含扩展方法的静态类,此类必须对客户端代码可见。
- 将扩展方法实现为静态方法,并且使其可访问性与所在类的可访问性一致。
- 扩展方法的第一个参数是指定方法所操作的类型、此参数前面必须加上this修饰符。
- 在调用代码中,添加using指令,用于指定包含扩展方法类的命名空间。
- 扩展方法的调用与调用类型的实例方法一样。
拓展方法示例
我们使用【控制台】项目来搞这个测试。
这里要重写一下StringExtension类,并添加我们想要的拓展方法。
重写代码
public static class StringExtension
{
public static int WordCount(this string str)
{
// 通过char进行拆分,英文单词一般都通过这些符号切割。
char[] arr = new char[] { ' ', '.', '?', ',' };
return str.Split(arr, StringSplitOptions.RemoveEmptyEntries).Count();
}
}
应用代码
static void Main(string[] args)
{
// 扩展一个用于单词计数的方法
string str = "I HAVA A DREAM!";
int count = str.WordCount();
Console.WriteLine("分割后单词个数是{0}个。", count);
}
输出效果:
yield关键字
yield关键字向编译器指示该关键字所在的方法是迭代器块,编译器将生成一个类来实现迭代器块中所表示的行为。 在迭代器块中,yield关键字与return关键字结合使用,向枚举器对象提供值,该值为返回值。
yield关键字示例
这里用一个列表的方式进行数据的遍历以及判断。这里单独创建了一个【Goods】类:
public class Goods
{
public string GoodsName { get; set; }
public double GoodsPrice { get; set; }
}
示例使用代码:
static void Main(string[] args)
{
List<Goods> userInfoList = new List<Goods>() {
new Goods() { GoodsName="薯片", GoodsPrice=5.9},
new Goods() { GoodsName="红肠", GoodsPrice=9.9},
};
var obj = getList(userInfoList, 9.9);
foreach (var item in obj)
{
Console.WriteLine("商品名称:{0},商品价格{1}", item.GoodsName, item.GoodsPrice);
}
}
public static IEnumerable<Goods> getList(List<Goods> list, double price)
{
foreach (var item in list)
{
if (item.GoodsPrice == price)
{
yield return item;
}
}
}
输出效果:
这个只是个基础示例,我们一般还是要通过Web项目来表述的。
相关文章
- c# mysql executenonquery_c#数据四种执行方法(ExecuteNonQuery)
- C# WPF DataGrid下面 使用CheckBox 选中事件
- C#/.NET/.NET Core Dapper 批量删除、新增、修改说明
- 用C#在本地创建一个Windows帐户(DOS命令)
- C#+MO实现一个道路编辑软件(刚开始)
- C#版ftp方法实现类的代码
- C#的关键字详细介绍
- C#TextBox扩展方法数据验证详细说明
- 解决C#winForm自定义鼠标样式的两种实现方法详解
- C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享
- C#同步和异步调用方法实例
- c#模拟jsescape方法的简单实例
- c#实现数据同步的方法(使用文件监控对象filesystemwatcher)
- c#调用Surfer软件,添加引用的具体操作方法
- C#函数式程序设计之用闭包封装数据的实现代码
- C#中使用ADOMD.NET查询多维数据集的实现方法
- C#实现对象XML序列化的方法
- C#读取视频的宽度和高度等信息的方法
- C#逐行分元素读取记事本数据并写入数据库的方法
- asp.net中c#自定义事件的实现方法详解
- C#可用于登录验证码的四位随机数生成方法
- C#实现延时并自动关闭MessageBox的方法
- C#将Sql数据保存到Excel文件中的方法
- C#百万数据查询出现超时问题的解决方法