Linq

LINQ(语言集成查询)的意图是提供一种统一且对称的方式,让程序员在广义的数据上得到和操作“数据”。通过使用LINQ,我们能够在C#程序语言内直接创建被陈伟查询表达式的实体。

      1.简单的Linq查询式:

             
        static void QueryOverInts()
        {
            int[] numbers = { 10, 20, 30, 40, 1, 4, 7, 9 };
            IEnumerable<int> subset = from i in numbers where i < 10 select i;
            foreach (int i in subset)
                Console.WriteLine("Item:{0}", i);
        }

       (1)隐式局部变量:

             var subset = from i in numbers where i < 10 select i;
        (2)扩展方法:

             往早先编译好的类型里添加新的成员;

        (3)延迟执行:

              在迭代内容前,LINQ不会真正做运算,这样可以为相同的容器多次应用相同的LINQ查询;

        (4)立即执行:

              以强类型容器来捕获LINQ查询结果,然后这个容器就不会再“连接”到LINQ表达式了;

                      int[] subsetIntArray = (from i in numbers where i < 10 select i).ToArray<int>();

                      List<int> subsetAsLisnt = (from i in numbers where i < 10 select i).ToList<int>();

       2..查询运算符的内部表示:

          (1)用查询运算符建立查询表达式:

     static void QueryOverStrings()
        {
            string[] currentVideoGames = { "Morrowind", "BioShock", "Half Life 2:Episode 1", "The Darkness", "Daxter",     "System Shock 2" };
            IEnumerable<string> subset = from g in currentVideoGames where g.Length > 6 orderby g select g;
            foreach (string s in subset)
                Console.WriteLine("Item:{0}", s);
            ReflectOverQueryResults(subset);
        } 

           (2)使用Enumerable类型和Lambda表达式来建立查询表达式:

                       static void QueryStringWithEnumerableAndLambdas()
        {
            Console.WriteLine("*****Using Enumerable/Lambda Expressions*****");
            string[] currentVideoGames = { "Morrowind", "BioShock", "Half Life 2:Episode 1", "The Darkness", "Daxter", "System Shock 2" };
            var subset = currentVideoGames.Where(game => game.Length > 6).OrderBy(game => game).Select(game => game);
            foreach (var game in subset)
                Console.WriteLine("Item :{0}", game);
            Console.WriteLine();
        }

 

          3.LINQ查询运算符:

                (1)基本选择语法:

                       var result=from item in container select item;

                (2)获取数据子集:

                       var result=from item in container where Boolean expression select item;

03-10
### LINQ 的核心概念与查询表达式的编程语言特性 LINQ(Language Integrated Query)作为.NET框架的一部分,旨在让开发人员能以声明的方式编写查询语句,适用于C#或VB.NET等高级语言。这一技术使开发者可以通过类似于SQL的语言风格来查询和操作多种数据源,包括但不限于内存中的集合、数据库以及XML文档等形式的数据存储[^1]。 #### 查询表达式的特点 查询表达式是LINQ的一个重要组成部分,它提供了一种简洁而直观的方法来进行复杂的数据检索工作。这种表达形式不仅易于理解和书写,而且支持强大的模式匹配能力,允许程序员按照自己的需求灵活地组合各种过滤器、投影和其他转换操作。例如,在C#中可以这样写: ```csharp var result = from student in students where student.Grade > 80 && student.Age < 25 orderby student.Name ascending select new {student.Name, student.Score}; ``` 这段代码展示了如何利用`from`, `where`, `orderby` 和 `select`关键字构建一个完整的查询管道,最终返回一个新的匿名对象列表,其中只包含满足条件的学生姓名及其分数[^2]。 #### 方法语法 vs 查询表达式 除了上述提到的查询表达式外,LINQ还提供了另一种称为方法语法的形式。两者之间存在一定的对应关系;实际上,编译器会将查询表达式翻译成相应的方法调用来执行实际的任务。对于某些场景来说,可能更倾向于使用一种而非另一种,具体取决于个人偏好或者项目的需求特点[^5]。 #### 延迟执行机制 值得注意的是,LINQ采用了延迟执行的设计理念——即直到真正遍历结果集之前都不会触发任何计算过程。这意味着可以在不立即消耗资源的情况下预先定义好一系列的操作步骤,并且可以根据实际情况动态调整这些步骤的内容。这样的设计有助于提高性能并简化复杂的业务逻辑处理流程。 #### 实际应用场景举例 考虑这样一个简单的例子:假设有一个整数列表,想要从中选取前两个大于零但不是偶数的数值,则可以用如下方式实现: ```csharp List<int> numbers = new List<int>{ /* some integers */ }; var filteredNumbers = numbers.Where(n => n > 0 && n % 2 != 0).Take(2); foreach(var num in filteredNumbers){ Console.WriteLine(num); } ``` 这里先通过Where()筛选符合条件的元素,再借助Take()限定数量,最后迭代输出所选的结果[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值