zoukankan      html  css  js  c++  java
  • ORM操作(一) 20141128

    ORM
    一、简要

    1.含义

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

    2.连接数据库--选择表拖进右键添加

    表名--类名(每个表生成一个类)
    列名--属性名(每一个属性映射数据库里的一列)
    表的关系--类的成员对象(成员变量与成员属性的关系)

    LinQ--集成化查询语言 SQL--结构化查询语言

    LinQ与SQL的区别:C#不识别SQL语言,输入错误也无提示;而LinQ语言则可以被C#识别,故LinQ若输入错误,C#即报错.

    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,将用到的表拖进来。

    第二步:实例化上下文对象。(O -- M -- R:上下文对象--承上启下,从关系型数据库中通过映射变成内存中对象)

    第三步:操作

    (一)增加:
    1.造对象

    MyDADataContext context =new MyDADataContext();
    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");//var动态推导出来的类型,根据后面的类型生成 var q= 3.14--double
    
    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.找

    MyDADataContext context = new MyDADataContext();
      var q = context.Info.Where(p => p.Code == "p001");
          if (q.Count() > 0)
              {
                  Info data = q.First();

    2.改

                   data.Name = "胡生";
                   data.Nation = "n001";
                   data.Sex = false;
    
               }

    3.提交

    context.SubmitChanges();//送回去覆盖原有数据--添加是从无到有,删除是从有到无,所有要提醒系统执行的时候注册,查询、修改不需要注册.

    (四)查询:

    1.查询所有

    MyDBDataContext context = new MyDBDataContext();

    2.所有人员

    var q = context.Info;

    3.显示

    foreach(Info data in q)
    {
    //data.Nation1:当前人员对应的民族对象。
    Console.WriteLine(data.Name+"	"+data.Nation1.Name);
    //data.Work:当前人员对应的工作记录集合
    foreach (Work work in data.Work)
     {
       Console.WriteLine("	"+work.Firm+"	"+work.Depart);
     }
    }

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

    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=="汉族");

    5.查询主键对象

    var q = context.Info.Where(p => p.Code == "p211"); //默认返回的是集合
    if (q.Count() > 0)    //看看集合中是否查出数据来了
     {
       Info data = q.First(); //取第一个对象出来
       Console.WriteLine(data.Nation1.Name + data.Name);
     }

     6.查询所有

    var q = from p in context.Info select p;
    var q = context.Info;

    7.单条件查询

    var q = from p in context.Info where p.Code=="p003" select p;
    var q = context.Info.Where(p => p.Code=="p003");

    8.多条件查询

    var q = from p in context.Car where p.Price > 30 && p.Brand=="b002" select p;//查询Car表中价格大于30万并且品牌代号为b002的车辆
    
    var q = context.Car.Where(p => p.Price > 30 && p.Brand == "b002");//查询Car表中价格大于30万并且品牌代号为b002的车辆
    
    var q = context.Car.Where(p => p.Price > 30).Where(p => p.Brand == "b002");//查询Car表中价格大于30万并且品牌代号为b002的车辆
    
    var q = from p in context.Car where p.Price > 30 || p.Brand == "b002" select p;//查询Car表中价格大于30万或品牌代号为b002的车辆
    
    var q = context.Car.Where(p => p.Price > 30 || p.Brand == "b002");//查询Car表中价格大于30万或品牌代号为b002的车辆

    9.模糊查询:

    var q = from p in context.Car where p.Name.Contains("5") select p; //包含
    
    var q = context.Car.Where(p => p.Name.Contains("5"));//包含
    
    
    var q = from p in context.Car where p.Name.StartsWith("奥迪") select p;//开头
    
    var q = context.Car.Where(p => p.Name.StartsWith("奥迪"));//开头
    
    
    var q = from p in context.Car where p.Name.EndsWith("奥迪") select p;//结尾
    
    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 

    10.Distinct查询

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

    11.连接查询——对象之间的关联关系点出来的(少用--表与表之间,尽量用对象)

    var q = context.Car.Where(p => p.Brand1.Productor.Prod_Name=="一汽丰田");
    var q = from p in context.Car where p.Brand1.Brand_Name == "一汽丰田" select p;
    var q = context.Car.Where(p => p.Brand1.Brand_Name == "宝马5系");
    var q = from p in context.Car where p.Brand1.Brand_Name == "宝马5系" select p;

    12.统计查询

      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));//价格平均值

    13. 分页

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

    14. 排序

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

    15. 集合操作

     
      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);
  • 相关阅读:
    SQL Sever语言 存储过程及触发器
    计蒜客 挑战难题 移除数组中的重复元素
    projecteuler Sum square difference
    码农谷 求前N项之和
    projecteuler Smallest multiple
    计蒜客 挑战难题 寻找插入位置
    Largest palindrome product
    计蒜客 挑战难题 元素移除
    码农谷 球从M米高度自由下落第N次落地时反弹的高度
    挑战难题 奇怪的国家
  • 原文地址:https://www.cnblogs.com/DORCASQING/p/4129600.html
Copyright © 2011-2022 走看看