linq to entity 基础

部分摘抄  http://www.cnblogs.com/nikymaco/archive/2012/07/11/2585594.html

linq(语言集成查询)在对象领域和数据领域之间架起了一座桥梁。

 一.每个LINQ语句都以from作为开头,以select作为结束.

1.语法关键字

 from :      指定数据源和范围变量(类似于迭代变量)。

    where:     根据一个或多个由逻辑“与”和逻辑“或”运算符(&& 或 ||)分隔的布尔表达式筛选源元素。

    select:    指定当执行查询时返回的序列中的元素将具有的类型和形式。

    group:    按照指定的键值对查询结果进行分组。

    into:       提供一个标识符,它可以充当对 join、group 或 select 子句的结果的引用。

    orderby: 基于元素类型的默认比较器按升序或降序对查询结果进行排序。

    join:       基于两个指定匹配条件之间的相等比较来联接两个数据源。

    let:         引入一个用于存储查询表达式中的子表达式结果的范围变量。

    in:          join 子句中的上下文关键字。

    on:         join 子句中的上下文关键字。

    equals:   join 子句中的上下文关键字。

    by:         group 子句中的上下文关键字。

    ascending:orderby 子句中的上下文关键字。

    descending:orderby 子句中的上下文关键字。

2.linq常用到的特性:

①. 匿名类型:  

    匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。 类型名由编译器生成,并且不能在源代码级使用。 每个属性的类型由编译器推断例如:var obj = new {A="a", B="b"}; 而LINQ则可以为 var nums = from obj in objs select new {obj.A, obj.B}

 3. LINQ 查询操作包含三个操作:获得一个或多个数据源、创建查询并执行查询。可以通过 LINQ 查询实现 IEnumerable 泛型接口或 IQueryable 泛型接口的数据源。 ObjectQuery 泛型类(可实现 IQueryable 泛型接口)的实例可充当 LINQ to Entities 查询的数据源。

①. IEnumerable<T> 泛型接口:公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代。IEnumerable<T> nums = from n in nums where .... orderby... select...

②.IQueryable 泛型接口:提供对数据类型已知的特定数据源的查询进行计算的功能。

4.查询:

 

 

下面是基本操作:

内联查询

 

var query= from obj1 in objs1
           join obj2 in objs2 on obj1.ID equals obj2.ID
           select new { A= obj1.Property, B = obj2.Property };

 

 左外联查询

 

var query = from obj1 in objs1
            join obj2 in objs2 on obj1.ID equals obj2.Obj1ID into g
            from subpet in g.DefaultIfEmpty()
            select new { P1 = obj1.P1, P2 = (subpet == null ? null : subpet.P2 ) };

 

分组查询

 

var query = from obj in objs
            group obj by obj.PropertyA into g
            orderby g.Key
            select g;

 

      注意,在此示例里,关键字 into 不是必须的,使用 into 时,必须继续编写该查询,并最终用一个 select 语句或另一个 group 子句结束该查询。

     LINQ的涉及应用如:linq to sql, lint to entites, linq to xml, linq to dataset 等等

 5.linq的延迟加载:延迟执行意味着表达式的计算延迟,直到真正需要它的实现值为止

 

View Code
 1 // 已知一个序列
 2  var array = new int[] {1, 2, 3};
 3  
 4  // 编写一段LINQ表达式获得一个序列变量query
 5  // 注意,这个变量仅仅是一个代理,在执行编译的时候,编译器检查完
 6  // 该代码的正确性后直接跳过,不再理会
 7  var query = from arr in array
 8              where arr > 1
 9              select arr;
10  
11  // 调用上述序列变量query,此时上述的LINQ表达才会执行。注意此时已是在
12  // 编译器Runtime 的情况下执行
13  foreach(var q in query)
14      Console.WriteLine(q.ToString());

 

 

 

转载于:https://www.cnblogs.com/bfy-19/archive/2012/07/18/2597381.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值