Linq技术

第一次课 框架技术:基本功能封装好,程序员直接使用
    分类:
    数据访问层框架(简化数据访问)
    业务层框架
    表示层框架

ORM:object对象与关系relation映射Mapping,数据访问层框架技术
    Linq to sql
    EF 实体模型
    NHbinate等
    baits等
    ...
  //前提:每一个表必须有主键
  //在项目新建ADO.net实体对象模型,自动生成访问操作的上下文入口,
  及实体类。

1获取所有数据代码1:
     //定义上下文对象
           上下文类名 context = new 上下文类名();
        //上下文对象.对应表集合.toList
      this.dataGridView1.DataSource = context.Grade.ToList();
  2.增加数据
            先定义要增加的对象
            Grade grade = new Grade { NJName = this.textBox1.Text };
            //1.往集合中增加对象
            y2Net22DBEntities context = new y2Net22DBEntities();
            //对象加入到集合中
            context.Grade.Add(grade);
            //2.同步数据库
            context.SaveChanges();
  3.修改数据
          //修改,根据条件在上下文获取到数据集合中的一个对象
            y2Net22DBEntities context = new y2Net22DBEntities();
            var gr = context.Grade.Single(p => p.NJId == id);//查询一个对象
            gr.NJName = this.textBox2.Text;//改属性
            //同步
            int n=context.SaveChanges();
  4.删除:找到上下文中的一个对象
     y2Net22DBEntities context = new y2Net22DBEntities();
     var gr= context.Grade.Single(p => p.NJId == id);//查询一个对象
     context.Grade.Remove(gr);
     //同步
     context.SaveChanges();
从一层可以看出EF代替了模型层与基本的数据访问的ADO.net操作
  i)如果在三层中实现,EF可以放在Model中,也可以在数据访问层
 ii)在DAL需要添加EF的引用
 iii)需要在model中的app.config中的连接字符串,复制放到表示层的web.config中
第二次
Linq技术
一:C#新的语法与功能
    LINQ( Language 11Query )即语言集成查询
    LINQ 是一组语言特性和API,使得你可以使用统一的方式
    编写各种查询。
    查询的对象包括XML、对象集合、SQL Server 数据库等等。
  
    where方法:用于筛选数据 
    返回类型为 var aa=集合.Where(p=> 条件);
   
    select方法:用于定义显示的列
    返回类型 var bb=集合.Select( p=> p );
                         Select(p=> new { p.属性1....}
   
    Single方法:用于在集合中查询一个对象
     返回类型  对象类型 bb=集合.Singel(p=>条件);
     注意:如果有多个对象返回,将出错。
    Orderby方法:用来集合按列名升序排列
    OrderByDescending(p=>p.属性) 用来集合按属性降序排列
   ///////有筛选,有排序,写的先后顺序//////////////
   //先写where,再写排序order,最后写显示select
   /////////////////////   
   Linq语法两种写法 :语句式,方法式
   1.方法式:  var aa=集合.方法(参数);
   2.语句式:   var aa=from 变量名  in 集合
                      where 条件
        order 属性名 
                      select 变量名 ;

注意:语句式比方法式运行效率低
          语法先写where ,再写排序, 最后写select

Max   最大值 (只能是一个属性的集合)
    Min   最小值
    Count  计数
    Average   平均值
    Sum       求和
    Skip      跳过几条 skip(数字)
    Take      取集合中的几个对象 take(数字)
  
知识点:委托
 1.是C#中一种类型,本质是一种特殊的类。定义在命名空间中。
   C#类型:类,接口,枚举,结构,委托
 2.C#委托,特殊的类,用来指代行为。初始化时关联方法。
   1)定义委托 public delegate 返回值类型 委托名(方法参数)
   2)关联方法 委托类型 对象=new 委托类型名(方法名)
   3)调用委托  对象(实参) 实际实现的结果为指代的方法。
 3.多态:同一行语句,有不同的运行结果.
     实现方法(方法重写,接口,委托...)
 4.委托可以作为方法的参数,调用委托作为参数的方法,必须用
   一个方法作为实参调用。
  事件:事件就是委托对象
 5. Lambda表达式  格式  (  方法参数  )=> {  方法体}
    本质就是一个功能性方法. =>运算式 用来分隔参数与方法体
    参数只用一个,方法体只一个语句,()可以省略掉
 6.使用Lambda表达式之前,先定义一个委托,需要关联方法时,
   用Lamdba表达式与之关联。
 7.框架定义了两个常见委托Action,Func,看到Action,Func作为参数
   可以代替大多数方法
Action用来代替没有返回值,可以用任何多参数的方法。
Func有返回值,最后一个参数输出。
   实参采用Lambda表达式.Select(p=>p); where(p=>条件)
上机:理解案例,仿照做一次。
 知识点:
一:扩展方法
    1)作用:往一个已经生成的类中加方法
    2)如何加:
       1)写一个静态类  类前static
       2)写一个静态方法 
    public static 返回值类型  方法名(this 类型 变量,方法参数){
       方法功能。。。。
    }
   3)调用用 对象.方法(参数);
   注意:
   1.当类本身的方法与扩展方法同名时,优先类本身的方法
   2.如果对父类扩展方法,则子类也会有该扩展方法
   3.如果对接口扩展方法,则所有实现类均有该扩展方法。
   public interface  接口名{  方法定义 } ,实现类实现所有方法
二:var :推断类型
    var 用来修饰一个可以推断出类型的局部变量
    格式:  var 变量=表达式或值.  由右边来确定左边变量的类型.
    注意 , 不能  var aa=null;
三:匿名类的对象,不定义类,直接通过对象初始化器定义对象
    格式:  var aa=new {  Name="李四", Age=19  }

第三次课
       多表数据显示方法
       //有主外键关系,ef中的多显示,例如显示学生
            //方法一:使用导航属性
            /*
            y2Net22DBEntities context = new y2Net22DBEntities();
            this.dataGridView1.DataSource=
                context.Student.Select(p=>new {
              p.XSDZ,
              p.XSName,
              p.Grade.NJName})
                .ToList();
             */
            //主法二:使用Linq连接查询
            y2Net22DBEntities context = new y2Net22DBEntities();
            var grade1 = context.Grade;
            var students = context.Student;
            var showdata = from g in grade1
                           join b in students on g.NJId equals b.XSGrade
                           select new { g.NJName, b.XSName, b.XSSex };
            this.dataGridView1.DataSource = showdata.ToList();

子查询写法
第四次课
Linq to sql 的ORM技术实现功能
1.模糊查询  示例 查询学生名有什么关键字
var aa= dbcontext.Student.Where(p=>p.XSName.IndexOf(key)>=0    
2.登陆条件查询  先查询,再计数,再比较
            var aa = from a in dbcontex.Admin
                     where a.UserName.Equals(name)
                            && a.UserPwd == pwd
                     select a;int count = aa.Count(); bool f = count > 0;
3.显示多表数据  如果创建了主外键关联
  方法一:使用导航属性  //查询学生,并显示出班级的名称,两表关联
        public  static IQueryable GetStudent()
        {
            var aa = from p in dbcontext.Student
                     select new {
                        p.XSName,
                        p.XSSex,
                        p.Grade.NJName //导航属性  };
            return aa;  }
  方法二:使用Linq的连接方法:用于显示两个有意义的集合之间的数据
    var gradelist = dbcontext.Grade;//1
            var studentList = dbcontext.Student;//2
            var aaaaa = from g in gradelist
                        join s in studentList
                        on g.NJId equals s.XSGrade
                        //where ...
                        select new
                        {
                            g.NJId,g.NJName, s.XSName,
                        };
  方法三:使用子查询
  注意:如果两个集合,在意义上有关联关系,没有创建关联,只能用第二个方法。
-------------------------------------------------------------------
Linq to SQL/EF取代ADO.net完成对数据库的访问,有时有些特别复杂的sql语句,
Linq to sql/EF(ORM技术)可能还是不能实现。如何做?Linq to sql/EF中集成了,方法
可以直接获取ADO.net的连接对象  执行SQL语句操作。主要两种,一个是查询,一个增删改
1。调用查询语句方法
   1)先定义一个显示出结果对应列属性的实体类(主要不是显示查询所有列)
   2)写好sql语句,可以使用参数化语句
   3)使用方法dbcontext.dataBase.ExecuteQuery<结果对应实体类>(sql).ToList()
2.调用增删改的方法
  1)写好sql语句,可以使用参数化sql语句
  2)使用方法dbcontext.ExecuteCommand(sql);

原文地址:https://www.cnblogs.com/xsdm/p/10043981.html

时间: 2024-11-10 11:21:44

Linq技术的相关文章

Linq技术四:动态Linq技术 -- Linq.Expressions

前面介绍了Linq的三个方面应用:Linq to SQL, Linq to XML和Linq to Object,这篇介绍一下动态Linq的实现方式及应用场景. 命名空间: System.Linq; System.Linq.Expressions; 应用Linq的时候,我们都知道只需要Lambda表达式就行,但有些场景仅仅只使用Data Model的字段名操作是不够的或者不方便的. 场景1:假设我们需要拼接Where条件进行查询,一种方式可以拼接IQueryable的表达式.但我想像写SQL语句

Linq技术三:Linq to Object 和生成数据表的扩展方法

这篇来谈论一下Linq第三个方面的应用:Linq to Object,只要是继承了IEnumerable或IQueryable接口的Object都能使用Linq特性进行操作.在操作过程当中可能很多人都觉得不好调试不能实时地观察结果数据集,想把IQuery的Linq查询语句转换成数据表DataTable,要怎么实现转换呢?来看一下. 先来说一场景解释一下为什么需要用Linq来解决一些问题,能解决一些什么样的问题,相对于SQL,DataTable等一些传统操作方式有哪些优势? 场景:目前主要数据源有

【LINQ技术】扩展特性和LINQ操作符

LINQ特有的编程结构 LINQ就像是嵌入到C#中的强类型查询语言,尽管和SQL查询很像,但语法却并不相同,甚至还有截然相反的一面. LINQ是在.NET发展到3.5版的时候被引进的,C#和VB语言都为此做了许多工作,扩展了大量新的编程结构. 一.隐式类型本地变量 var--一个如此小巧的关键字却有着强大的力量. var varInt=1; var varBool=True; var varString="String, String, String"; Console.WriteLi

利用LinQ技术和lambd表达式进行增删改查

数据库访问技术: ADO.net EF框架 LinQ LinQ是一种高集成化的数据库访问技术,他将数据库中的表映射成程序中的类 数据库的表名变成类名 数据库的列名变成字段名/属性名 所有的操作都是通过LinQ自动生成的一个上下文对象来进行操作的,这个对象名是LinQ的名字+"DataContext" ,一个数据库对应一个LinQ 1.创建LinQ 在项目上右键,添加一个LinQ to SQL 然后点击服务器资源管理器,选择小插头样式的连接到数据库 正确填写需要连接的数据库信息,点击确定

Linq学习总结1--参考Linq技术详解

2个要点: 1.linq操作的集合必须实现IEnumerable接口,所以在这3.0之前为实现该接口的集合需通过Cast或TypeOf方法转换成可Linq的集合; 2.查询式和Lame那啥表达式都可以一起使用.那个方便用哪个,他们只在第一次使用时才会真正去查询; List<Employee> ils = new List<Employee>() { new Employee(){IDCode="jack5",Age=20,littleName="ab&

C#Linq技术中SelectMany(...)的内部实现推测

对于声明为:public static IEnumerable<TResult> SelectMany<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, IEnumerable<TResult>> selector);而言,调用它的形式就是: AList.SelectMany(itm=>itm.listProp);  // 其中AList中的属性里有 也是集合

Entity Framework技术系列之7:LINQ to Entities

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 前言 LINQ(Language Integrated Query,语言集成查询)是一组用于C#和VB.NET语言的扩展,它允许编写C#或者VB.NET代码,以与查询数据库相同的方式操作内存数据.LINQ提Entity Framework技术系

【转】Entity Framework技术系列之7:LINQ to Entities

前言 LINQ(Language Integrated Query,语言集成查询)是一组用于C#和VB.NET语言的扩展,它允许编写C#或者VB.NET代码,以与查询数据库相同的方式操作内存数据. LINQ提Entity Framework技术系列之7:LINQ to Entities供了丰富的类似SQL的查询语法,功能强大且容易上手.下图汇总展示了LINQ技术的官方实现集合: 图1官方LINQ实现汇总图 正 如上图所示,LINQ to Entities 是LINQ技术在实体对象模型中的一种实现

【ASP.NET实战教程】基于ASP.NET技术下多用户博客系统全程实战开发(NNblog)

岁末主推:牛牛老师主讲,多用户博客系统,基于ASP.NET技术,年后将带来移动业务平台项目项目目标: 打造个性品牌Blogo,定制多用户博客 为每一个博客用户提供个性化的 blogo解决方案,打造精品blogo门户网站  环境:VS2008+SQL Server2005 [小编推荐:现在学习可以使用 VS2012或者以上+SQL 2008或及以上  环境不一定必须和教程一样,学习的是思路]主要技术: 主体框架:逻辑架构ASP.NET MVC,物理架构Three Ties,2者相结合. 为了提高网