LINQ基本操作

一、LINQ

LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性。已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知、静态类型等强类型语言的好处。并且它同时还使得查询可以方便地对内存中的信息进行查询而不仅仅只是外部数据源。
LINQ包括五个部分:LINQ to Objects、LINQ to DataSets、LINQ to SQL、LINQ to Entities、LINQ to XML。

  • LINQ to Objects:用于处理数组和集合
  • LINQ to Entities:在通过Entity Framework技术访问数据库时使用
  • LINQ to SQL:MS SQL Server中的数据访问技术
  • LINQ to XML:在处理XML文件时使用 LINQ to DataSet:在使用DataSet对象时使用 Parallel
  • LINQ(PLINQ):用于执行并行查询

这里介绍LINQ to Objects:用于处理数组和集合的操作。

1.1 LINQ用两个查询用法

 查询表达式(Query Expression)和方法查询(Fluent Syntax)。

1.2 LINQ常用关键字

关键字含义
from指定数据源和范围变量
where根据布尔表达式(由逻辑与 或 等组成)从数据源中筛选元素
select指定查询结果中的元素所具有的类型或表现形式
group对对查询结果按照键值进行分组
into提供一个标示符,它可以充当对 join group 或 select 子句结果的引用
orderby对查询出的元素进行排序
join按照两个指定匹配条件来联接俩个数据源
let产生一个用于查询表达式中子表达式查询结果的范围变量

其他实际使用用查询。

二、运用LINQ

2.1 初始化数据

  //初始化masterList 列表
            var masterList = new List<MartialArtsMaster>()
            {
                new MartialArtsMaster() {Id = 1, Name = "黄蓉", Age = 18, Menpai = "丐帮", Kongfu = "打狗棒法", Level = 9},
                new MartialArtsMaster() {Id = 2, Name = "洪七公", Age = 70, Menpai = "丐帮", Kongfu = "打狗棒法", Level = 10},
                new MartialArtsMaster() {Id = 3, Name = "郭靖", Age = 22, Menpai = "丐帮", Kongfu = "降龙十八掌", Level = 10},
                new MartialArtsMaster() {Id = 4, Name = "任我行", Age = 50, Menpai = "明教", Kongfu = "葵花宝典", Level = 1},
                new MartialArtsMaster() {Id = 5, Name = "东方不败", Age = 35, Menpai = "明教", Kongfu = "葵花宝典", Level = 10},
                new MartialArtsMaster() {Id = 6, Name = "林平之", Age = 23, Menpai = "华山", Kongfu = "葵花宝典", Level = 7},
                new MartialArtsMaster() {Id = 7, Name = "岳不群", Age = 50, Menpai = "华山", Kongfu = "葵花宝典", Level = 8},
                new MartialArtsMaster() {Id = 8, Name = "令狐冲", Age = 23, Menpai = "华山", Kongfu = "独孤九剑", Level = 10},
                new MartialArtsMaster() {Id = 9, Name = "梅超风", Age = 23, Menpai = "桃花岛", Kongfu = "九阴真经", Level = 8},
                new MartialArtsMaster() {Id = 10, Name = "黄药师", Age = 23, Menpai = "梅花岛", Kongfu = "弹指神通", Level = 10},
                new MartialArtsMaster() {Id = 11, Name = "风清扬", Age = 23, Menpai = "华山", Kongfu = "独孤九剑", Level = 10}
            };
            //初始化功夫kongfuList 
            var kongfuList = new List<Kongfu>()
            {
                new Kongfu() {Id = 1, Name = "打狗棒法", Power = 90},
                new Kongfu() {Id = 2, Name = "降龙十八掌", Power = 95},
                new Kongfu() {Id = 3, Name = "葵花宝典", Power = 100},
                new Kongfu() {Id = 4, Name = "独孤九剑", Power = 100},
                new Kongfu() {Id = 5, Name = "九阴真经", Power = 100},
                new Kongfu() {Id = 6, Name = "弹指神通", Power = 100}
            };

2.2 筛选Where与Select

Where方法提供了我们对于一个集合的筛选功能,Select方法可以查询投射,返回新对象集合。这里,假设我们先筛选出所有男性集合,再根据男性集合中所有项的姓名生成子集合(这是一个不同于原类型的类型),就可以借助Select方法来实现。
使用LINQ做查询( 表达式写法)
查询等级大于8,并且门派为“丐帮”的数据。

//1、表达式写法
var res1 = from m in masterList
           //from后面设置查询的集合
           where m.Level > 8 && m.Menpai == "丐帮" //通过&&添加并列的条件
            //where后面跟上查询的条件
             select m;//表示m的结果结合返回

//2、扩展方法的写法
 var res2 = masterList.Where(m => m.Level > 8 && m.Menpai == "丐帮");

//输出,res1和res2其实内容一样
  foreach (var temp in res2)
            {
                Console.WriteLine(temp.Name);
            }
//黄蓉 洪七公 郭靖

3.3 LINQ 联合查询

 //取得所学功夫的杀伤力大于90 的武林高手
          var res = from m in masterList
                      join k in kongfuList on m.Kongfu equals k.Name
                      where k.Power > 90
                      select new { id=m.Id, name=m.Name,kongfu=m.Kongfu,power=k.Power};

在这里插入图片描述

3.4,对查询结果做排序 orderby (descending)

OrderByDescending降序。

//1、表达式写法
  var res = from m in masterList
                      //from后面设置查询的集合
                      where m.Level > 8 && m.Menpai == "丐帮" //通过&&添加并列的条件
                      //orderby m.Age descending
                      orderby m.Level, m.Age //按照多个字段进行排序,如果字段的属性相同,就按照第二个属性排序
                      //where后面跟上查询的条件
                      select m;//表示m的结果结合返回

//2、扩展方法的写法
 var res2 = masterList.Where(m => m.Level > 8 && m.Menpai == "丐帮").OrderBy(m =>m.Level).ThenBy(m => m.Age);

3.5 按照自身字段分组 group

   var res = from m in masterList
                group m by m.Kongfu
                into g
                select new {count = g.Count(), key = g.Key};//g.Key Key表示是按照那个属性分的组

在这里插入图片描述

3.6 量词操作符 any all 判断集合中是否满足某个条件

  bool res = masterList.Any(m => m.Menpai == "丐帮");
            Console.WriteLine(res); //true
            bool res1 = masterList.All(m => m.Menpai == "丐帮");
            Console.WriteLine(res1);  //false
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值