LinQ是指集成化查询语言,通过映射将数据库内的表名变为C#的类名,将列名作为属性名,将表的关系作为类的成员对象。O--M--R

O-Object对象(李昌辉)
R-Relation关系
M-Mapping映射

LinQ包括:LinQ to SQL,针对SQL的查询,它是一个带有可视化的操作界面的ORM工具。

LinQ to Object,用来实现对内存中集合对象的查询。

LinQ to DataSet,对强类型化或弱类型化的DataSet或独立的DataTable进行查询。

LinQ to Entity,对实体框架中EDM定义的实体集合进行查询。

(一):LinQ to SQL

第一步:建立LinQ2SQL类

添加一个新建项,选择LinQ to SQL,将用到的表拖进来。

第二步:实例化上下文对象,基本所有操作都是通过上下文对象来进行的。

MyDBDataContext context = new MyDBDataContext();

第三步:操作

一、增加数据:

1.造一个要添加的数据对象:

Info data = new Info();
data.Code = "p211";
data.Name = "石头";
data.Sex = false;
data.Nation = "N001";
data.Birthday = new DateTime(, , );

2.在上下文中注册上面新造的对象。

context.Info.InsertOnSubmit(data);

3.提交执行

context.SubmitChanges();

二、删除:

1. 找出要删除的数据

MyDBDataContext context = new MyDBDataContext();
var q = context.Info.Where(p => p.Code == "p003");

2. 删除注册

 if (q.Count() > )
{
Info data = q.First();
//注册
context.Work.DeleteAllOnSubmit(data.Work);
context.Family.DeleteAllOnSubmit(data.Family);
context.Info.DeleteOnSubmit(data);
}

3. 提交执行

context.SubmitChanges();

三、修改:

1. 找出要修改的数据

MyDBDataContext context = new MyDBDataContext();
var q = context.Info.Where(p=>p.Code == "p001");

2. 改,不用注册

if (q.Count() > )
{
Info data = q.First();
//改
data.Name = "胡生";
data.Nation = "n001";
data.Sex = false;
}

3. 提交执行

context.SubmitChanges();

四、查询:

1.查所有

 MyDBDataContext context = new MyDBDataContext();
//所有人员
var q = context.Info;
//var q = from p in context.Info select p;
//显示
foreach(Info data in q)
{
//data.Nation1:当前人员对应的民族对象。
Console.WriteLine(data.Name+"\t"+data.Nation1.Name);
//data.Work:当前人员对应的工作记录集合
foreach (Work work in data.Work)
{
Console.WriteLine("\t"+work.Firm+"\t"+work.Depart);
}
}

2. 根据主键查询(条件查询),默认返回的都是集合。

var q = from p in context.Info where p.Code == "p211" select p;
var q = context.Info.Where(p => p.Code == "p211").Where(p => p.Nation1.Name == "汉族"); //Lambda表达式(最最简化的函数,只有参数和函数体的匿名函数)
var q = context.Info.Where(p => p.Code == "p211" && p.Nation1.Name=="汉族");
var q = context.Info.Where(p => p.Code == "p211"); //默认返回的是集合
if (q.Count() > ) //看看集合中是否查出数据来了
{
Info data = q.First(); //取第一个对象出来
Console.WriteLine(data.Nation1.Name + data.Name);
}

3. 多条件查询

var q = from p in context.Car where p.Price >  && p.Brand=="b002" select p;
var q = context.Car.Where(p => p.Price > && p.Brand == "b002");
var q = context.Car.Where(p => p.Price > ).Where(p => p.Brand == "b002");
var q = from p in context.Car where p.Price > || p.Brand == "b002" select p;
var q = context.Car.Where(p => p.Price > || p.Brand == "b002");

4. 模糊查询

var q = from p in context.Car where p.Name.Contains("") select p; //包含
var q = from p in context.Car where p.Name.StartsWith("奥迪") select p;//开头
var q = from p in context.Car where p.Name.EndsWith("奥迪") select p;//结尾
var q = context.Car.Where(p => p.Name.Contains(""));//包含
var q = context.Car.Where(p => p.Name.StartsWith("奥迪"));//开头
var q = context.Car.Where(p => p.Name.EndsWith("型"));//结尾
var q = from p in context.Car where p.Name.Substring(, ) == "" select p;//第三个字符
var q = context.Car.Where(p => p.Name.Substring(,) == "");//第三个字符是5

5. Distinct查询

var q = (from p in context.Car select p.Brand).Distinct();//去重
var q = context.Car.Select(p=>p.Brand).Distinct();//去重

6. 连接查询——对象之间的关联关系点出来的。

var q = context.Car.Where(p => p.Brand1.Productor.Prod_Name=="一汽丰田");

7. 去重查询出显示,IEnumerable是集合的根类型

static void Show(IEnumerable<string> q)
{
foreach (string d in q)
{
Console.WriteLine(d);
}
}

8. 统计查询

MyDBDataContext context = new MyDBDataContext();
//var query = from p in context.Car select p;
var query = context.Car;//查出所有
Console.WriteLine(query.Count());//统计个数
Console.WriteLine(query.Max(p => p.Price));//价格的最大值
Console.WriteLine(query.Min(p => p.Price));//价格的最小值
Console.WriteLine(query.Max(p => p.Price * p.Oil));//价格乘以油耗的最大值
Console.WriteLine(query.Sum(p => p.Price));//价格求和
Console.WriteLine(query.Sum(p => p.Price * p.Oil));//价格乘以油耗之后求和
Console.WriteLine(query.Average(p => p.Price));//价格平均值

9. 分页查询

//分页
MyDBDataContext context = new MyDBDataContext();
var query = context.Car.Skip( * ).Take();//每页4条数据,要查第三页的4条数据,跳过8条取下面4条
Show(query);

10. 排序查询

//排序
MyDBDataContext context = new MyDBDataContext();
//var query = context.Car.OrderBy(p=>p.Price); //升序
var query = context.Car.OrderByDescending(p => p.Price);//降序
Show(query);

11. 集合操作

//集合操作
MyDBDataContext context = new MyDBDataContext();
var query1 = context.Car.Where(p => p.Brand1.Productor.Prod_Name == "一汽丰田");
var query2 = context.Car.Where(p => p.Price > ); //交集
var query = query1.Intersect(query2);
//并集
//var query = query1.Union(query2);
//差集
//var query = query1.Except(query2);
//补集
//var query = context.Car.Except(query1);
Show(query);

以上是关于LINQ的一些基本用法,LINQ实用起来非常方便,同时功能也很强大,很好用。

LinQ to SQL用法详解的更多相关文章

  1. Elasticsearch SQL用法详解

    Elasticsearch SQL用法详解  mp.weixin.qq.com 本文详细介绍了不同版本中Elasticsearch SQL的使用方法,总结了实际中常用的方法和操作,并给出了几个具体例子 ...

  2. 转载linq to sql 的详解

    [转]LINQ To SQL 语法及实例大全 2011-11-26阅读38651 评论9 LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL ...

  3. SQL中CONVERT()函数用法详解

    SQL中CONVERT函数格式: CONVERT(data_type,expression[,style]) 参数说明: expression 是任何有效的 Microsoft® SQL Server ...

  4. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  5. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  6. Mysql导入导出工具Mysqldump和Source命令用法详解

    Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式( ...

  7. [转]Mysql导入导出工具Mysqldump和Source命令用法详解

    Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式( ...

  8. oracle正则表达式regexp_like的用法详解

    oracle正则表达式regexp_like的用法详解 /*ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与IN ...

  9. DAX/PowerBI系列 - 查询参数用法详解(Query Parameter)

    PowerBI  - 查询参数用法详解(Query Parameter) 很多人都不知道查询参数用来干啥,下面总结一下日常项目中常用的几个查询参数的地方.(本人不太欢hardcode的东西) 使用查询 ...

随机推荐

  1. Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)

    之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...

  2. 小程序用户反馈 - HotApp小程序统计仿微信聊天用户反馈组件,开源

    用户反馈是小程序开发必要的一个功能,但是和自己核心业务没关系,主要是产品运营方便收集用户的对产品的反馈.HotApp推出了用户反馈的组件,方便大家直接集成使用 源码下载地址: https://gith ...

  3. Xamarin Android 应用程序内图标上数字提示

    最近在用 Xamarin 做一个 Android 应用,打开应用时,如果有新消息,需要在应用内的 Toolbar 或者首页的图标上显示数字提示.在这里和大家分享一下实现方法,如果你有更新好的实现方法, ...

  4. U盘安装Kali 出现cd-rom无法挂载 已解决

    用U盘安装Kali Linux的过程中,出现cd-rom无法挂载的现象,百度坑比啊,醉了.下面亲测成功 出现无法挂载后,选择执行shell 第一步:df -m此时会看到挂载信息,最下面的是/dev/* ...

  5. Spring代理模式及AOP基本术语

    一.代理模式: 静态代理.动态代理 动态代理和静态代理区别?? 解析:静态代理需要手工编写代理类,代理类引用被代理对象. 动态代理是在内存中构建的,不需要手动编写代理类 代理的目的:是为了在原有的方法 ...

  6. 零基础在线制作Windows Phone 8 应用

    任何用户(不管你是否会编程),只要你有浏览器,都可以使用 Windows Phone App Studio (下文中用App Studio指代) 快速制作出一个属于你的Windows Phone的应用 ...

  7. WebStorm 常用功能的使用技巧分享

    WebStorm 是 JetBrain 公司开发的一款 JavaScript IDE,使用非常方便,可以使编写代码过程更加流畅. 本文在这里分享一些常用功能的使用技巧,希望能帮助大家更好的使用这款强大 ...

  8. ABP(现代ASP.NET样板开发框架)系列之15、ABP应用层——应用服务(Application services)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之15.ABP应用层——应用服务(Application services) ABP是“ASP.NET Boiler ...

  9. ABP源码分析十四:Entity的设计

    IEntity<TPrimaryKey>: 封装了PrimaryKey:Id,这是一个泛型类型 IEntity: 封装了PrimaryKey:Id,这是一个int类型 Entity< ...

  10. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...