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 5501 The Highest Mark(贪心+01背包)
题意:类似cf的赛制,每道题目有A,B,C三个值,A表示初始分数,B表示每分钟题的分数会减少B,C表示做这道题需要C分钟,数据保证分数不会变为负数.现在给出比赛时长,问安排做题的顺序,求最大得分. 思 ...
- UVA 489-- Hangman Judge(暴力串处理)
Hangman Judge In ``Hangman Judge,'' you are to write a program that judges a series of Hangman gam ...
- 小米手机与魅族的PK战结果 说明了什么
我国电子商务面临的问题,淘宝退出百度无疑是一个遗憾.当在网上购物时.用户面临的一个非常大的问题就是怎样在众多的站点找到自己想要的物品,并以最低的价格买到.自从淘宝退出百度.建立自己的搜索引擎后,广大消 ...
- python Debug 单步调试
一直犯愁的是python的调试,曾经写c都是编译完了用gdb直接调试了,轻松愉快.如今遇到这么一个解释型的程序.不知道怎么办了.用log吧,有时就是一个小程序,不想写这么多代码.打屏吧.有时屏幕翻得快 ...
- 树形控件CTreeCtrl的使用
树形控件在界面编程中应用十分普遍,如在资源管理器中和树形结构显示书的文件夹等,我们一步步研究树形控件的使用. 在对话框界面上首先拖动创建一个树,一般我们改变三个属性: Has Buttons显示带有& ...
- arm+linux 裸机环境搭建之安装工具篇(eclipse)
之前已经讲述如何安装gcc和gdb,在此不赘述! 一.所需要的软件有两个: jre-7u25-linux-i586.rpm(虚拟机) eclipse-cpp-kepler-R-linux-gtk .t ...
- css系列教程--border和background
css标签b:1.background:用法 background:可以指定颜色,背景,平铺效果以及背景定位.background:url(aa.png) #fff 0px 0px no-repeat ...
- SVG-1
<rect>矩形 <circle>圆 <ellipse>椭圆 <line>直线 <polyline>折线 <polygon>标签 ...
- Android自定义UI的实现和应用
在Android项目开发中,不可避免的要遇到自定义的UI,用较好的体验去讨好UED妹子和交互设计师手下留情~几个迭代下来,遇到了不少这样的要求,有简单有复杂.最好的实现方案就是讲业务和UI隔离,封装成 ...
- C# 对XML基本操作总结
C# 对XML基本操作包括读取节点的数据,添加节点.读取节点属性,修改节点属性等.具体如下: XML文件:文件在MyDocument文件夹下 <?xml version="1.0&qu ...