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();
第三步:操作
一、增:
.造对象。
Info data = new Info();
data.Code = "p211";
data.Name = "石头";
data.Sex = false;
data.Nation = "N001";
data.Birthday = new DateTime(, , );
.在上下文中注册上面新造的对象。
context.Info.InsertOnSubmit(data);
.提交
context.SubmitChanges();
二、删:(由于主、外键关系,需要先删外键,才能删除)
. 找出来
MyDBDataContext context = new MyDBDataContext();
var q = context.Info.Where(p => p.Code == "p003");
. 注册 if (q.Count() > )
{
Info data = q.First();
//注册
context.Work.DeleteAllOnSubmit(data.Work);//删除整个work表
context.Family.DeleteAllOnSubmit(data.Family);//删除fanmily整个表
context.Info.DeleteOnSubmit(data);//最后删除要删除的主键表
. 提交
context.SubmitChanges();
}
三、改:
. 找出来
MyDBDataContext context = new MyDBDataContext();
var q = context.Info.Where(p=>p.Code == "p001");
. 改,不用注册 if (q.Count() > )
{
Info data = q.First();
//改
data.Name = "胡生";
data.Nation = "n001";
data.Sex = false; . 提交
context.SubmitChanges();
}
四、查:
.查所有 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);
}
} . 根据主键查询(条件查询),默认返回的都是集合。
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);
}
. 多条件查询
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");
. 模糊查询 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 . Distinct查询
var q = (from p in context.Car select p.Brand).Distinct();//去重
var q = context.Car.Select(p=>p.Brand).Distinct();//去重
. 连接查询——对象之间的关联关系点出来的。
var q = context.Car.Where(p => p.Brand1.Productor.Prod_Name=="一汽丰田");
. 去重查询出显示,IEnumerable是集合的根类型 static void Show(IEnumerable<string> q)
{
foreach (string d in q)
{
Console.WriteLine(d);
}
} . 统计查询 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));//价格平均值 . 分页
//分页
MyDBDataContext context = new MyDBDataContext();
var query = context.Car.Skip( * ).Take();//每页4条数据,要查第三页的4条数据,跳过8条取下面4条
Show(query);
. 排序
//排序
MyDBDataContext context = new MyDBDataContext();
//var query = context.Car.OrderBy(p=>p.Price); //升序
var query = context.Car.OrderByDescending(p => p.Price);//降序
Show(query);
. 集合操作 //集合操作
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 to sql介绍及增、删、改、查的更多相关文章

  1. JDBC中执行sql语句的 增 , 删 , 改 , 查 的方法

    executeQuery()  : 执行 SELECT 语句,它几乎是使用最多的 SQL 语句 executeUpdate() :   执行 INSERT.UPDATE 或 DELETE 语句以及 S ...

  2. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  3. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  4. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  5. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  6. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  7. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  8. python基础中的四大天王-增-删-改-查

    列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...

  9. 网站的增 / 删 / 改 / 查 时常用的 sql 语句

    最近在学习数据库 php + mysql 的基本的 crud 的操作,记录碰到的坑供自己参考.crud中需要用到的sql语句还是比较多的,共包括以下几个内容: 查询所有数据 查询表中某个字段 查询并根 ...

随机推荐

  1. 与《YII框架》不得不说的故事—5篇目录

    与<YII框架>不得不说的故事—基础篇 第1章 课程目标 1-1 课程目标 (00:54) 第2章 课前知识准备 2-1 YII的启动和安装 (05:12) 2-2 YII请求处理流程 ( ...

  2. PHP学习(前言)

    PHP学习(前言) 都说做IT技术的都该写写博客,以前没写过,现在开始写写吧.不是给别人看,就当是自己的学习笔记了. 大三结束了,该找工作了,对web前端感兴趣,想从事前端工作,自然要会一门后台语言了 ...

  3. codeforces 401D. Roman and Numbers 数位dp

    题目链接 给出一个<1e18的数, 求将他的各个位的数字交换后, 能整除m的数的个数. 用状态压缩记录哪个位置的数字已经被使用了, 具体看代码. #include<bits/stdc++. ...

  4. python爬虫数据抓取方法汇总

    概要:利用python进行web数据抓取方法和实现. 1.python进行网页数据抓取有两种方式:一种是直接依据url链接来拼接使用get方法得到内容,一种是构建post请求改变对应参数来获得web返 ...

  5. Cortex-M3 动态加载二(RWPI数据无关实现)

    上一篇关于动态加载讲述的是M3下面的ropi的实现细节,这一篇则讲述RW段的实现细节以及系统加载RW段的思路,我在M3上根据这个思路可以实现elf的动态加载,当然进一步的可以优化很多东西,还可以研究将 ...

  6. MySQL 关闭子表的外键约束检察

    准备: 定义一个教师表.一个学生表:在学生表中引用教师表ID create table teachers(teacherID int not null auto_increment primary k ...

  7. 红外摄像头为什么使用850nm波长红外发射管

    市面上有很多不同波长的红外发射管,其中以850nm和940nm波长为主.那么红外摄像头为什么使用850nm波长红外发射管? 首先,我们来了解一下红外摄像头的相关知识.简单来说红外摄像头是用来感应红外线 ...

  8. Vim 实用技术,第 1 部分: 实用技巧(转)

    原文链接:http://blog.jobbole.com/20604/ 0. Vim 简介 作为开源世界最重要的编辑器之一(另一个是 Emacs),Vim 以其强大的功能和可定制能力被众多开发者所喜爱 ...

  9. 12.06 JavaScript

    任务 掌握JavaScript基础知识,能够使用JavaScript编写一些复杂度不大的交互功能. 任务: JavaScript基础 做完任务一的时候深深地感觉到自己的基础非常的薄弱,在这里再次感谢一 ...

  10. Robolectric 探索之路

    layout: post title: Roboletric探索之路,从抗拒到依赖 description: Roboletric Android Unit Testing category: blo ...