Linq 扩展方法与延迟加载和Lambda

语言集成查询(LINQ)

语言集成查询(LINQ)是一系列直接将查询功能集成到C#的技术统称。
LINQ 系列技术提供了针对对象 (LINQ to Objects)、关系数据库 (LINQ to SQL) 和 XML (LINQ to XML) 的一致查询体验。
class LINQQueryExpressions
{
    static void Main()
    {

        // Specify the data source.
        int[] scores = new int[] { 97, 92, 81, 60 };

        // Define the query expression.
        IEnumerable<int> scoreQuery =
            from score in scores
            where score > 80
            select score;

        // Execute the query.
        foreach (int i in scoreQuery)
        {
            Console.Write(i + " ");
        }
    }
}
// Output: 97 92 81

一些LINQ扩展方法列表

扩展方法描述延迟
All如果源数据中所有的条目都与谓词匹配,则返回true
Any如果源数据中至少有一个条目与谓词匹配,则返回true
Contains如果数据源含有指定的条目或值,则返回true
Count返回数据源的条目数
First返回数据源的第一个条目
FirstOrDefault返回数据源的第一个条目,或无条目时返回默认值
Last返回数据源的最后一个条目
LastOrDefault返回数据源的最后条目,或无条目时返回默认值
Max Min返回lambda表达式表达的最大值或最小值
OrderBy OrderByDescending基于lambda表达式返回的值对源数据进行排序
Reverse反转数据源中的数据项的顺序
Select设计一个查询结果
SelectMany把每一个数据项投射到一个条目序列之中,然后把所有这些结果序列连接成一个序列
Single返回数据源的第一个条目,或者有多个匹配时抛出异常
SingleOrDefault返回数据源的第一个条目,或者无条目时,返回默认值;有多个匹配条目时,抛出一个异常
Skip SkipWhile跳过指定书目的元素,或者当谓词匹配时跳过
Sum对谓词选定的值求和
Take TakeWhile从数据源的开始出选择指定条目的元素,或当谓词匹配是选择条目
ToArray ToDictionary ToList把数据源转换成数组或其他集合类型
Where过滤掉数据源数据中与谓词不匹配的条目

延迟的LINQ查询

延迟的意思是,直到对结果进行枚举后,才会执行该查询,每次对记过进行枚举时都会从头求取查询结果。如:

Product[] products = {
                            new Product{Name="kayak",Category="Watesports",Price=275M},
                            new Product{Name="LifeJack",Category="Watesports",Price=48.95M},
                            new Product{Name="Soccer",Category="Soccer",Price=19.58M},
                            new Product{Name="Corner",Category="Soccer",Price=34.95M}
                        };
         var foundProducts = products.OrderByDescending(e => e.Price)
                        .Take(3).Select(e => new { e.Name, e.Price });
                    string result = "";//延迟的LINQ查询定义的位置

products[2]=new Product{Name="kayak1",Category="Watesports",Price=276M};
                //修改数据源
           foreach (var prod in foundProducts)
           {
               result += prod.Name + ":" + prod.Price + " ";
           }//枚举查询结果,它会显示修改数据源之后的结果
12345678910111213141516

在定义LINQ查询得位置和修改数据源的位置分别插入断点,两个断点出查看foundProducts会发现发生了改变,尽管初始化foundProducts之后并没有对foundProducts进行更改,只是更改了源数据而已,此时延迟的LINQ这一特性便展现出来了。

Lambda表达式

lambda表达式 是一个匿名函数,是一种高效的类似于函数式编程的表达式,lambda简化了开发中需要编写的代码量。
所有的lambda表达式都使用lambda运算符 => ,这个运算符叫做goes to 运算符左边是输入参数(如果有),右边是表达式或语句块 。
x=>x*x x gose to x times x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值