走进Linq(一)—开篇介绍

     

    LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展。用类似SQL的统一语法来查询任何形式数据源数据的技术。

    解决降低访问和整合信息数据的复杂度的问题。


一、三种独立的 ADO.NET 语言集成查询 (LINQ) 技术 

     LINQ to DataSet、LINQ to SQL 、LINQ to Entities


     LINQ to DataSet 提供针对 DataSet 的形式多样的优化查询, 

     LINQ to SQL 使您可以直接查询 SQL Server 数据库架构

     LINQ to Entities 允许查询实体数据模型。


     

二、IEnumerable与IEnumerator区别与联系


    IEnumerable接口:它表示可以查询的数据集合,一个查询通常是逐个对集合中的元素进行筛选操作,返回一个新的IEnumerable对象,用来保存查询结果。只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象。     

    IEnumerator:是一个真正的集合访问器,没有它,就不能使用foreach语句遍历集合或数组,因为只有    IEnumerator对象才能访问集合中的项。1个属性2个方法。

      Current属性:来获取当前集合中的项

      MoveNext方法只是将游标的内部位置向前移动,即移到一下个元素而已要想进行循环遍历

      ReSet:该位置位于集合中第一个元素之前。


三、步骤:

  1、获取数据源

  2、创建查询

     与SQL查询语句区别,LINQ查询语句中子句顺序是颠倒过来的。

  3、执行查询

   (1)立即执行

         情况1:当查询操作返回值为单个值的方法时,调用时它立即执行。

     实例: 

<span style="font-size:18px;">        public class User
        {
            public int NumId { get; set; }
            public string Name { get; set; }
            public int Score { get; set; }
        }
        private void btnNow_Click(object sender, EventArgs e)
        {
  
            List<User> users = new List<User>{
                new User{NumId=3,Name="小小",Score=22},
                new User{NumId=1,Name="依依",Score=33},
                new User{NumId=2,Name="乐乐",Score=55},
            };
            int count = (from user in users
                         select user.Score).Sum();
            Console.WriteLine("分数:{0}",count);
            lblShow.Text = count.ToString();
        }</span>

 情况2:可通过对查询变量(延迟执行)调用 ToList 或 ToArray 等方法来强制执行查询。

     {
            int[] arr = { 11, 40, 343, 434, 23, 43, 24 };
            IEnumerable ie = arr.Select(p => p > 50).ToList();
            //输出这部分代码可重用
            IEnumerator result = ie.GetEnumerator();
            while (result.MoveNext())
            {
                Console.WriteLine(result.Current);
            }
        } 
 

       ie中存放结果

    

(2)延迟执行  

<span style="font-size:18px;">   <pre name="code" class="csharp">         //数据源
            int[] arr = { 11, 40, 343, 434, 23, 43, 24 };
 
            //ie为查询变量
            IEnumerable ie = arr.Select(p => p > 50);             
            IEnumerator result = ie.GetEnumerator();
            while(result.MoveNext()){
                Console.WriteLine(result.Current);
            } 
 
    输出结果:false、false、true、true、false、false、false</span>
    from子句指定数据源
    where子句应用帅选器
    select指定返回的元素的类型</span>



注意:

   如果只是创建查询语句,则不会检索任何数据

   查询变量本身不会执行任务操作并且不返回任何数据,只是存储实际的查询执行会延迟到在 foreach 语句中循环访问查询变量时发生。上述例子中ie即为查询变量。

      



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值