20141129 LinQ to SQL
ORM
O-Object对象
R-Relation关系
M-Mapping映射
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
O -- M -- R
表名-类名
列名-属性名
表的关系-类的成员对象
LinQ 集成化查询语言 SQL-结构化查询语言
LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。
LinQ包括:LinQ to SQL,LinQ to Object,LinQ to DataSet,LinQ to Entity
LinQ to SQL
第一步:建立LinQ2SQL类
第二步:实例化上下文对象。
MyDBDataContext context = new MyDBDataContext();
第三步:操作
一、增:
1.造对象。
Info data = new Info();
data.Code = "p211";
data.Name = "周青";
data.Sex = false;
data.Nation = "N001";
data.Birthday = new DateTime(1990, 1, 2);
2.在上下文中注册上面新造的对象。
context.Info.InsertOnSubmit(data);
3.提交
context.SubmitChange();
二、删:
MyDBDataContext context = new MyDBDataContext();
//1.找
var q = context.Info.Where(p => p.Code == "p003");
if (q.Count() > 0)
{
Info data = q.First();
//2.注册
context.Work.DeleteAllOnSubmit(data.Work);
context.Family.DeleteAllOnSubmit(data.Family);
context.Info.DeleteOnSubmit(data);
//3.提交
context.SubmitChanges();
}
三、改:
1.找
2.改
3.提交
四、查:
查询所有
MyDBDataContext context = new MyDBDataContext();
//所有人员
var q = context.Info;
//显示
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() > 0) //看看集合中是否查出数据来了
{
Info data = q.First(); //取第一个对象出来
Console.WriteLine(data.Nation1.Name + data.Name);
}
查询所有
var q = from p in context.Info select p;
var q = context.Info;
但条件查询
var q = from p in context.Info where p.Code=="p003" select p;
var q = context.Info.Where(p => p.Code=="p003");
多条件查询
var q = from p in context.Car where p.Price > 30 && p.Brand=="b002" select p;
var q = context.Car.Where(p => p.Price > 30 && p.Brand == "b002");
var q = context.Car.Where(p => p.Price > 30).Where(p => p.Brand == "b002");
var q = from p in context.Car where p.Price > 30 || p.Brand == "b002" select p;
var q = context.Car.Where(p => p.Price > 30 || p.Brand == "b002");
模糊查询:
var q = from p in context.Car where p.Name.Contains("5") 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("5"));//包含
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(2, 1) == "5" select p;//第三个字符
var q = context.Car.Where(p => p.Name.Substring(2,1) == "5");//第三个字符是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=="一汽丰田");
//统计函数
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));
统计函数
public static void Main(string[] args)
{
//分页
MyDBDataContext context = new MyDBDataContext();
var query = context.Car.Skip( * ).Take();
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 > 30); ////交集
//var query = query1.Intersect(query2);
////并集
////var query = query1.Union(query2);
////差集
////var query = query1.Except(query2);
////补集
////var query = context.Car.Except(query1); //Show(query);
} static void Show(IEnumerable<Car> cars)
{
foreach (Car data in cars)
{
Console.WriteLine(data.Name + "\t"+data.Brand1.Productor.Prod_Name+"\t" + data.Price);
}
}
排序/集合操作/分页
20141129 LinQ to SQL的更多相关文章
- LINQ to SQL语句(7)之Exists/In/Any/All/Contains
适用场景:用于判断集合中元素,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就返回True,否则为False).有2种形式,分别为简单形式 ...
- 年终巨献 史上最全 ——LINQ to SQL语句
LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...
- LINQ to SQL语句(20)之存储过程
在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的几个存储过程来理解一下. 1.标量返回 在数据库中, ...
- LINQ to SQL语句(19)之ADO.NET与LINQ to SQL
它基于由 ADO.NET 提供程序模型提供的服务.因此,我们可以将 LINQ to SQL 代码与现有的 ADO.Net 应用程序混合在一起,将当前 ADO.NET 解决方案迁移到 LINQ to S ...
- LINQ to SQL语句(18)之运算符转换
运算符转换 1.AsEnumerable:将类型转换为泛型 IEnumerable 使用 AsEnumerable<TSource> 可返回类型化为泛型 IEnumerable 的参数.在 ...
- LINQ to SQL语句(17)之对象加载
对象加载 延迟加载 在查询某对象时,实际上你只查询该对象.不会同时自动获取这个对象.这就是延迟加载. 例如,您可能需要查看客户数据和订单数据.你最初不一定需要检索与每个客户有关的所有订单数据.其优点是 ...
- LINQ to SQL语句(14)之Null语义和DateTime
Null语义 说明:下面第一个例子说明查询ReportsToEmployee为null的雇员.第二个例子使用Nullable<T>.HasValue查询雇员,其结果与第一个例子相同.在第三 ...
- LINQ to SQL语句(10)之Insert
1.简单形式 说明:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges()提交到数据库. var newCustomer = new Custo ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
随机推荐
- hdu 1241 Oil Deposits_dfs or bfs
题意:给你n*m的图,@代表有油田的格子,*代表没油田的格子,如果油田旁边有油田就合并一起成为一个油田区,合并的方向为8个,现在问你油田合并过后,有多少个油田区 解法:用dfs or bfs dfs: ...
- [SQL]一个删选数据的例子,使用GROUP、DISTINCT
今天遇到的问题,纠结了一上午,终于解决了.在此记录下来,自我认为还有很多类似的问题都可以套用这段代码. 需求描述: 一个表MyImage,列有:号码ID,路径PATH 如: ID PATH 1 C ...
- -DDEBUG编译标记
想必大家都有利用输出函数如printf来帮助我们调试程序的经历,这是一种比较原始的程序调试辅助方法,在Linux下也可以为我们所用.不过这种方法有一个明显的缺点,就是在调试完后我们必须注释或删除掉这些 ...
- hibernate 查询、二级缓存、连接池
hibernate 查询.二级缓存.连接池 查询: 1) 主键查询 Dept dept = (Dept) session.get(Dept.class, 12); Dept dept = (Dep ...
- KMP快速模式匹配的java实现
假期实在无聊赖啊.把这个算法实现了一下即算是打发时间也算练练手了. KMP算法的关键是用归纳法计算失败函数.网上很详细了.下面直接给出代码. /** * * @author Vincent * */ ...
- 九度OJ 题目1371:最小的K个数
题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 输入: 每个测试案例包括2行: 第一行为2个整数n,k(1< ...
- 【最大流】【HDU2883】【kebab】
题意: 有一个烧烤机,每次最多能烤 m 块肉,现在有 n 个人来买烤肉,每个人到达时间为 si,离开时间为 ei,点的烤肉数量为 ci,点的烤肉所需烘烤时间为 di, 每个人要烤的肉可以分成若干份在同 ...
- golang之pkg(包)
一.概述 Golang拥有超过100个标准包(可用go list std |wc -l查看) 任何包系统设计的目的都是简化大型程序的设计和维护工作,通过将一组相关的特性放进一个独立的模块以便于理解和更 ...
- JS中slice,splice,split的区别
不知道大家对slice,splice,splite是肿么样的感觉,反正我刚接触到这三个函数的时候整个人都懵了,因为一个个长的跟孪生兄弟似的,每次用的时候都会混,于是决定记下来,也给大家当个参考吧. s ...
- android开发获取网络状态,wifi,wap,2g,3g.工具类(一)
android开发获取网络状态整理: package com.gzcivil.utils; import android.content.Context; import android.net.Con ...