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的更多相关文章

  1. LINQ to SQL语句(7)之Exists/In/Any/All/Contains

    适用场景:用于判断集合中元素,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就返回True,否则为False).有2种形式,分别为简单形式 ...

  2. 年终巨献 史上最全 ——LINQ to SQL语句

    LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...

  3. LINQ to SQL语句(20)之存储过程

    在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的几个存储过程来理解一下. 1.标量返回 在数据库中, ...

  4. LINQ to SQL语句(19)之ADO.NET与LINQ to SQL

    它基于由 ADO.NET 提供程序模型提供的服务.因此,我们可以将 LINQ to SQL 代码与现有的 ADO.Net 应用程序混合在一起,将当前 ADO.NET 解决方案迁移到 LINQ to S ...

  5. LINQ to SQL语句(18)之运算符转换

    运算符转换 1.AsEnumerable:将类型转换为泛型 IEnumerable 使用 AsEnumerable<TSource> 可返回类型化为泛型 IEnumerable 的参数.在 ...

  6. LINQ to SQL语句(17)之对象加载

    对象加载 延迟加载 在查询某对象时,实际上你只查询该对象.不会同时自动获取这个对象.这就是延迟加载. 例如,您可能需要查看客户数据和订单数据.你最初不一定需要检索与每个客户有关的所有订单数据.其优点是 ...

  7. LINQ to SQL语句(14)之Null语义和DateTime

    Null语义 说明:下面第一个例子说明查询ReportsToEmployee为null的雇员.第二个例子使用Nullable<T>.HasValue查询雇员,其结果与第一个例子相同.在第三 ...

  8. LINQ to SQL语句(10)之Insert

    1.简单形式 说明:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges()提交到数据库. var newCustomer = new Custo ...

  9. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

随机推荐

  1. C Statements

    1,while((ch = getchar()) != EOF){    putchar(ch);}2,while((ch=getchar()) != EOF){    if(ch < '0' ...

  2. block的一点知识

    一个block的笔记: http://www.cnblogs.com/xinye/archive/2013/03/03/2941203.html http://segmentfault.com/q/1 ...

  3. jquery promot

    http://www.itivy.com/jquery/archive/2011/10/15/jquery-impromptu-usage.html

  4. 从头开始-06.C语言中预处理指令

    预处理指令 不带参数的宏定义: 格式: #define 宏名 值 作用:提高代码的可读性 在程序编译前把所有出现宏名标示的位置都替换为定义宏的时候,宏名后面的值 带参数的宏定义 格式 #define ...

  5. oracle中set define off

    set define off关闭替代变量功能 在SQL*Plus中默认的"&"表示替代变量,也就是说,只要在命令中出现该符号,SQL*Plus就会要你输入替代值.这就意味着 ...

  6. (转)C#与C++之间类型的对应

    C#与C++之间类型的对应 Windows Data Type .NET Data Type BOOL, BOOLEAN Boolean or Int32 BSTR String BYTE Byte ...

  7. I/O重定向与管道

    1.输出重定向 (1)>  覆盖输出 (2)>>  追加输出 (3) set -C: 禁止对已经存在文件使用覆盖重定向: 强制覆盖输出,则使用 >| set +C: 关闭上述功 ...

  8. Scala基础入门-4

    Scala学习——类 简单类和无参方法 class Counter { private var value = 0 // 必须初始化字段 def increment() { value += 1 } ...

  9. MYSQL 数学运算符问题

    背景: 在mysql中   ’stringA' + 'stringB' 这种类型的操作,在mysql内部会自动转化为两个double 数进行运算. -------------------------- ...

  10. Oracle EBS-SQL (BOM-13):检查未定义库存分的物料类.sql

    select distinct msi.segment1            编码 , msi.description                      描述  , msi.primary_ ...