Linq之集合对象

什么是Linq
       LINQ语言集成z查询(Language  Integrated  Query)是微软公司提供的一项新技术,用来替代传动sql语句的一个革命性技术,借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据,是.NET Framework3.5以上版本支持的新技术,所在命名空间 using System.Linq.
       linq按查询访问可分为四部分:Linq to slq、Linq to objects、Linq  to  DataSet、Linq to XML,分别为操作数据库(包括增删改查)、集合数组、DataSet内存中缓存数据、XML文件 。
       Linq有表达式查询与方法查询两种查询方式。
       本文重点是操作集合的方法查询。

较为常用的查询操作方法有:
筛选操作  Where
投影操作  Select
排序操作 OrderBy
聚合操作  Count,Sum、Max、Min、Average
元素操作  Single
数据类型转换操作 ToList、ToArray

说明:
筛选:将结果集限制为只包含那些满足指定条件的元素的操作,又称为选择。

投影:将对象转换为一种新形式的操作,该形式通常只包含那些将随后使用的属性。通过使用投影,您可以构建依据每个对象生成的新类型。您可以映射属性,并对该属性执行数学函数。还可以在不更改原始对象的情况下映射该对象。

聚合:聚合运算从值集合计算单个值。比如计算平均数,计算总和都属于聚合操作。
所有的聚合操作均不适用于查询表达式语法
Count  统计元素个数
Max 确定集合中最大值
Min 确定集合中最小值
Sum 计算集合中值的总和
Average 计算集合中值的平均值

元素操作:从一个序列返回单个特定元素
所有的元素操作均不适用于查询语法
ElementAt 返回集合中指定索引处的元素
ElementAtOrDefault 返回集合中指定索引处的元素,如不存在返回默认值
First 返回集合中的第一个元素或满足条件的第一个元素
FirstOrDefault 返回集合中的第一个元素或满足条件的第一个元素。如果没有这样的元素,则返回默认值
Last 返回集合中的最后一个元素或满足条件的最后一个元素
LastOrDefault 返回集合中的最后一个元素或满足条件的最后一个元素。如果没有这样的元素,则返回默认值
Single 返回集合中的唯一元素或满足条件的唯一元素
SingleOrDefault 返回集合中的唯一元素或满足条件的唯一元素。如果没有这样的元素,则返回默认值

注:当使用ElementAt/First/Last/Single等方法时,如果取不到符合要求的值,程序将出错。可以使用对应的带OrDefault后缀的方法避免出错

//集合操作
internal static void linq1()
        {
            //集合初始化器
            List<model.Product> list = new List<model.Product>{
               new model.Product{ProductID=1,Name="Name1",Price=1m},
               new model.Product{ProductID=2,Name="Name2",Price=2m},
               new model.Product{ProductID=3,Category="Category1"},
               new model.Product{ProductID=4,Category="Category2",Name="xg233"}
            };
            //linq方法查询
            //输出全部,并转为list集合
            var s1 = list.Select(f => f).ToList();

            //输出ProductID==2的ProductID字段
            var s2 = list.Where(q => q.ProductID == 2).Select(q => q.ProductID);
            var f2 = from f in list where f.ProductID == 2 select f.ProductID;

            //投影操作,输出对象ProductID==2的Name与Price字段  
            var s3 = list.Where(a => a.ProductID == 2).Select(a => new { a.Name, a.Price });
            var f3 = from f in list where f.ProductID == 2 select new { f.Name, f.Price};

            //根据ProductID字段排序
            var s4 = list.OrderBy(f => f.Name).Select(f=>f.Name);
            var f4 = from f in list orderby f.ProductID select f.Name;

            //根据ProductID字段排序后在根据Name字段排序
            var s5 = list.OrderBy(f => f.ProductID).ThenBy(f=>f.Name).Select(f => f.Name);
            var f5= from f in list orderby f.ProductID,f.Name select f.Name;

            //求和
            var s6 = list.Sum(f => f.ProductID);

            //求ProductID字段最小的那个对象
            var s7 = list.Min(f => f.ProductID);

            //返回ProductID>2的第一个元素
            var s8 = list.Where(f => f.ProductID>2).Select(f => f.ProductID).First();

        }


linq操作数组示例
  internal static void array()
        {
            int[] scores = new int[] { 1, 2, 4, 6, 3, 7, 6 };

            //linq表达式查询
            //输出1, 2, 4, 6, 3, 7, 6
            IEnumerable<int> f1 = from sc in scores select sc;
            //输出 6, 7, 6    
            IEnumerable<int> f2 = from sc in scores where sc > 5 select sc;
            //输出6,6,7
            IEnumerable<int> f3 = from sc in scores where sc > 5 orderby sc select sc;

            //linq方法查询
            //输出1, 2, 4, 6, 3, 7, 6 查询全部
            IEnumerable<int> s1 = scores.Select(s=>s);
            //输出 6, 7, 6  查询 s > 5的数
            IEnumerable<int> s2 = scores.Where(s => s > 5);
            //输出6,6,7  查询 s > 5的数,并排序
            IEnumerable<int> s3 = scores.Where(s => s>5).OrderBy(s=>s);
            foreach (int i in f1)
            {
                Console.WriteLine(i);
            }
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值