C# LINQ使用案例参考


/images/seo/211211100022076443.jpeg

C#源码参考:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinkConsole
{
    class Program
    {
        static void Main(string[] args)
        {
              //-------------最基本的简单查询----------------//
            List<int> numbers = new List<int>() { 1,2,3,4,5,6,7,8,9,10};
            var numQuery = from num in numbers
                          where num % 2 == 0
                           select num;
            foreach (var num in numQuery)
            {
               Console.WriteLine("{0,1}", num);
            }

             //-------------读取List<>中的句子----------------//
             FormExpDemo2();
            //-------------复合form子句----------------//
            FormExpDemo();
            //-------------多个from句子---------------//
            FormExpDemo3();
            //-------------where-------------------//
             WhereExpDemo();
            //-------------select------------------//
            SelectDemo();
            //-------------group--------------------//
            GroupDemo();
            //-------------into------------------------//
            IntoDemo();
            //--------------OrderBy--------------------//
            ThenByDemo();
            //--------------let----------------------//
            LetDemo();
            //--------------join--------------------//
            JoinDemo();
            Console.ReadLine();
        }
        public class CustomerInfo
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public string Tel { get; set; }
            public List<string> telTable { get; set; }
        }
        public static void FormExpDemo2()
        {
            //
            List<CustomerInfo> customers = new List<CustomerInfo>
            {
                new CustomerInfo{ Name = "欧阳晓晓",Age = 35,Tel = "123"},
                new CustomerInfo{ Name = "上官飘飘",Age = 17,Tel = "456"},
                new CustomerInfo{ Name = "诸葛菲菲",Age = 23,Tel = "789"}
            };
            var query = from ci in customers
                        where ci.Age > 20
                        select ci;
            foreach (var ci in query)
            {
                Console.WriteLine("姓名:{0}年龄:{1}电话:{2}", ci.Name, ci.Age, ci.Tel);
            }
        }

        //复合from子句    // 相当于两个for循环而已
        private static void FormExpDemo()
        {
            List<CustomerInfo> customers = new List<CustomerInfo>
            {
                new CustomerInfo { Name = "欧阳小小",Age= 35,telTable = new List<string> {"123","234"} },
                new CustomerInfo { Name = "上官飘飘",Age= 35,telTable = new List<string> {"456","567"} },
                new CustomerInfo { Name = "诸葛菲菲",Age= 35,telTable = new List<string> {"789","456"} },
            };
            //查询包含电话号码456的客户
            var query = from ci in customers
                        from tel in ci.telTable
                        where tel.IndexOf("456") > -1
                        select ci;
            foreach (var ci in query)
            {
                Console.WriteLine("姓名:{0}年龄:{1}", ci.Name, ci.Age);
                foreach (var tel in ci.telTable)
                {
                    Console.WriteLine("          电话:{0}", tel);
                }

            }
        }

        //多个from子句,和复合子句看起来是一样的,其实不一样,一个是单个数据源中的子元素的集合,一个是对多个数据源进行查询
        private static void FormExpDemo3()
        {
            List<CustomerInfo> customers = new List<CustomerInfo>
            {
                new CustomerInfo{ Name = "欧阳晓晓",Age = 35,Tel = "123"},
                new CustomerInfo{ Name = "上官飘飘",Age = 77,Tel = "456"},
                new CustomerInfo{ Name = "诸葛菲菲",Age = 23,Tel = "789"}
            };
            List<CustomerInfo> customers2 = new List<CustomerInfo>
            {
                new CustomerInfo{ Name = "令狐冲",Age = 25,Tel = "123"},
                new CustomerInfo{ Name = "东方不败",Age = 15,Tel = "456"},
                new CustomerInfo{ Name = "任盈盈",Age = 13,Tel = "789"}
            };
            //在customers 中寻找年龄大于20的客户
            //在customenrs中寻找年龄小于30岁的客户
            var query = from custo in customers
                        where custo.Age > 20
                        from custo2 in customers2
                        where custo2.Age < 30
                        select new { custo, custo2 };
            foreach (var ci in query)
            {
                Console.WriteLine("{0},{1}", ci.custo.Name, ci.custo2.Name);//这样得到的是一个交叉联结表,有点类似于SQL中的笛卡尔沉积
            }
        }

        //where子句查询
        //where就是用来筛选元素的,除了开始和结束位置,where可以在任意位置使用,
        //一个LIKQ语句中可以有where子句,也可以没有,可以有一个,也可以有多个。
        //多个where子句之间的关系相当于逻辑“与”,每个子句中又可以包含多个用“谓词”链接的逻辑表达式,&&,或者||
        private static void WhereExpDemo()
        {
            List<CustomerInfo> clist = new List<CustomerInfo>
            {
                 new CustomerInfo{ Name="欧阳晓晓", Age=35, Tel ="1330708****"},
                 new CustomerInfo{ Name="上官飘飘", Age=17, Tel ="1592842****"},
                 new CustomerInfo{ Name="令狐冲", Age=23, Tel ="1380524****"}
            };
            //可以查询符合多个条件的人(名字是三个字或者姓令的,但年龄必须大于20)
            var query = from custo in clist
                        where (custo.Name.Length == 3 || custo.Name.Substring(0, 1) == "令") && custo.Age > 20
                        select custo;//select 也可以改成,比如custo.Name。或者用一个函数,把变量传出去
            foreach (var ci in query)
            {
                Console.WriteLine("姓名:{0}年龄:{1}电话:{2}", ci.Name, ci.Age, ci.Tel);

            }

            //where中使用自定义函数,查询三个字并且姓令的客户
            var query2 = from custo in clist
                         where (custo.Name.Length == 3 && ChechName(custo.Name))
                         select custo;
            foreach (var ci in query2)
            {
                Console.WriteLine("姓名:{0}年龄:{1}电话:{2}", ci.Name, ci.Age, ci.Tel);
            }


        }
        private static bool ChechName(string name)
        {
            if (name.Substring(0, 1) == "令")
                return true;
            else
                return false;
        }

        //select 用法举例
        private static void SelectDemo()
        {
            List<CustomerInfo> clist = new List<CustomerInfo>
            {
                 new CustomerInfo{ Name="欧阳晓晓", Age=35, Tel ="1330708****"},
                 new CustomerInfo{ Name="上官飘飘", Age=17, Tel ="1592842****"},
                 new CustomerInfo{ Name="令狐冲", Age=23, Tel ="1380524****"}
            };
            string[] names = { "令狐冲", "任盈盈", "杨过", "小龙女", "欧阳小夏", "欧阳晓晓" };
            //查询在给定谓词数组里存在的客户
            var query = from custo in clist
                        where custo.Age < 30
                        select new MyCustomerInfo { Name = custo.Name, Tel = custo.Tel };
            foreach (var ci in query)
            {
                Console.WriteLine("姓名:{0}电话:{1}类型{2}", ci.Name, ci.Tel, ci.GetType().FullName);
            }
        }
        public class MyCustomerInfo
        {
            public string Name { get; set; }
            public string Tel { get; set; }
        }

        //-------------------Group----------------------//
        static List<CustomerInfo> clist = new List<CustomerInfo>
        {
             new CustomerInfo{ Name="欧阳晓晓", Age=35, Tel ="1330708"},
             new CustomerInfo{ Name="上官飘飘", Age=17, Tel ="1592842"},
             new CustomerInfo{ Name="欧阳锦鹏", Age=35, Tel ="1330708"},
             new CustomerInfo{ Name="上官无忌", Age=23, Tel ="1380524"}
        };
        private static void GroupDemo()
        {
            //按照名字的前两个字进行分组
            var query = from custo in clist
                        group custo by custo.Name.Substring(0, 2);
            foreach (IGrouping<string, CustomerInfo> group in query)
            {
                Console.WriteLine("分组键:{0}", group.Key);
                foreach (var ci in group)
                {
                    Console.WriteLine("姓名:{0}电话:{1}", ci.Name, ci.Tel);
                }
                Console.WriteLine("*********************");
            }
            //可以知道group子句返回的是一个IGrouping<TKey,TElement>泛型接口的对象集合
            //TKey是键的对象类型,在用于group子句的时候,编译器会识别数据类型,用于存储分组的键值,也就是根据什么分的组
            //TElement是指的对象类型用于分配储存结果,变量基于这个接口的类型就是遍历这个值,也就是分组的对象
        }

        //----------------into子句---------------//
        private static void IntoDemo()
        {
            //into提供了一个临时标识符,它储存了into子句前面的查询内容,使他后面的子句可以方便使用,再次查询投影
            var query = from custo in clist
                        group custo by custo.Name.Substring(0, 2) into gpcustomer
                        orderby gpcustomer.Key descending //排序,
                        select gpcustomer;
            Console.WriteLine("into用于group子句");
            foreach (var group in query)
            {
                Console.WriteLine("分组见:{0}", group.Key);
                foreach (var ci in group)
                {
                    Console.WriteLine("姓名:{0}电话:{1}", ci.Name, ci.Tel);
                }
                Console.WriteLine("***********************");
            }
            var query2 = from custo in clist
                         select new { NewName = custo.Name, NewAge = custo.Age } into newCustomer
                         orderby newCustomer.NewAge
                         select newCustomer;
            Console.WriteLine("into用于select子句");
            foreach (var ci in query2)
            {
                Console.WriteLine("{0}年龄:{1}", ci.NewName, ci.NewAge);
            }
        }

        //---------------排序子句--------------------//
        //LINQ可以按元素的一个或者多个属性对元素进行排序,表达式的排序方式分为OrderBy、OrderByDescending、ThenBy、ThenByDescending
        //加了Descending的就是降序,没有加的就是升序

        private static void ThenByDemo()
        {
            List<CustomerInfo> clist = new List<CustomerInfo>
            {
                 new CustomerInfo{ Name="欧阳晓晓 ", Age=35, Tel ="1330708****"},
                 new CustomerInfo{ Name="上官飘飘 ", Age=17, Tel ="1592842****"},
                 new CustomerInfo{ Name="郭靖 ", Age=17, Tel ="1330708****"},
                 new CustomerInfo{ Name="黄蓉 ", Age=17, Tel ="1300524****"}
            };
            //按照年龄升序,再按照名字的字数次要排序
            var query = from customer in clist
                        orderby customer.Age, customer.Name.Length
                        select customer;
            Console.WriteLine("按年龄排列,按名字字数进行次要排序");
            foreach (var ci in query)
            {
                Console.WriteLine("姓名:{0} 年龄:{1} 电话:{2}",ci.Name, ci.Age, ci.Tel);

            }
            //按年龄降序,再按名字的字数降序次要排列
            var query2 = from customer in clist
                         orderby customer.Age descending , customer.Name.Length descending
                         select customer;
            Console.WriteLine("\n按年龄排列,按名字字数进行降序次要排列");
            foreach (var ci in query2)
            {
                Console.WriteLine("姓名:{0} 年龄:{1} 电话:{2}", ci.Name, ci.Age, ci.Tel);
            }

        }

        //--------------let子句---------------------//

        private static void LetDemo()
        {
            var query = from custo in clist
                        let g = custo.Name.Substring(0, 1)//let建立一个范围变量,在where中使用
                        where g == "欧" || g == "上"//也可以不写,写成customer.Name.Substring(0, 1) == "郭" || customer.Name.Substring(0, 1) == "黄"
                        select custo;
            foreach (var ci in query)
            {
                Console.WriteLine("姓名:{0} 年龄:{1} 电话:{2}", ci.Name, ci.Age, ci.Tel);
            }
        }

        //-------------join子句-------------------//
        private static void JoinDemo()
        {
            //如果两个数据源中的属性可以进行相等比较,那么两个句子可以用join进行关联,比较的符号为equal,而不是==
            List<CustomerInfo> clist = new List<CustomerInfo>
            {
               new CustomerInfo{ Name="欧阳晓晓", Age=35, Tel ="1330708****"},
               new CustomerInfo{ Name="上官飘飘", Age=17, Tel ="1592842****"},
               new CustomerInfo{ Name="郭靖", Age=17, Tel ="1330708****"},
               new CustomerInfo{ Name="黄蓉", Age=17, Tel ="1300524****"}
            };
            List<CustomerTitle> titleList = new List<CustomerTitle>
            {
               new CustomerTitle{ Name="欧阳晓晓", Title="歌手"},
               new CustomerTitle{ Name="郭靖", Title="大侠"},
               new CustomerTitle{ Name="郭靖", Title="洪七公徒弟"},
               new CustomerTitle{ Name="黄蓉", Title="才女"},
               new CustomerTitle{ Name="黄蓉", Title="丐帮帮主"}
            };
            //根据姓名进行内部联结
            var query = from customer in clist
                        join title in titleList
                        on customer.Name equals title.Name
                        select new { Name = customer.Name, Age = customer.Age, Title = title.Title };
            foreach (var ci in query)
            {
                Console.WriteLine("姓名:{0} 年龄:{1}{2}", ci.Name, ci.Age, ci.Title);
            }
            //根据姓名进行分组联结
            Console.WriteLine("\n根据姓名进行分组联结");
            var query2 = from customer in clist
                         join title in titleList
                         on customer.Name equals title.Name into tgroup
                         select new { Name = customer.Name, Titles = tgroup };
            foreach (var g in query2)
            {
                Console.WriteLine(g.Name);
                foreach (var g2 in g.Titles)
                {
                    Console.WriteLine("     {0}", g2.Title);
                }
            }
            //根据姓名进行 左外部联结
            Console.WriteLine("\n左外部联结");
            var query3 = from customer in clist
                         join title in titleList
                         on customer.Name equals title.Name into tgroup
                         from subTitle in tgroup.DefaultIfEmpty()
                         select new { Name = customer.Name, Title = (subTitle == null ? "空缺" : subTitle.Title) };
            foreach (var ci in query3)
            {
                Console.WriteLine("姓名:{0} ", ci.Name, ci.Title);
            }
        }
        public class CustomerTitle
        {
            public string Name { get; set; }
            public string Title { get; set; }
        }
    }
}



C# LINQ使用案例参考

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:C#.NET RESTFul API详解
下一篇:C#多线程使用读写锁ReaderWriterLockSlim同步写入文件
评论列表

发表评论

评论内容
昵称:
关联文章

C# LINQ使用案例参考
C# LINQ基础-Linq基本使用方法
C#.NET LINQ入门基础
C# LINQ使用Distinct方法检查对象某个属性的值是否重复
C# LINQ .Count语法
C# LINQ .ForEach迭代器
C# LINQ 判断记录重复
.NET5 Core 关于LINQ查询使用DateDiff解决方案
C# LINQ 使用事务删除主从表数据
C#开发实例-数据字典作为参考数据在表格中显示的两种方案
C/S快速开发框架 - 命名规范参考
C/S开发框架的数据访问层用LINQ吗?
使用框架开发大型ERP系统之生产管理与人事考勤系统界面参考
C# LINQ .GroupBy语法
C# SharpMap的简单使用
C#的Expression表达式使用方法
C/S框架软件产品客户案例
CSFrameworkV6旗舰版源码展示(C#,LINQ+EF)
C# LINQ 生成List<T>交叉表数据
C/S系统开发框架多级明细表(三级表/主从从表)数据结构参考

热门标签
.NET5 .NET6 .NET7 APP Auth-软件授权注册系统 Axios B/S B/S开发框架 Bug Bug记录 C#加密解密 C#源码 C/S CHATGPT CMS系统 CodeGenerator CSFramework.DB CSFramework.EF CSFrameworkV1学习版 CSFrameworkV2标准版 CSFrameworkV3高级版 CSFrameworkV4企业版 CSFrameworkV5旗舰版 CSFrameworkV6.0 DAL数据访问层 Database datalock DbFramework Demo教学 Demo下载 DevExpress教程 DOM EF框架 Element-UI EntityFramework ERP ES6 Excel FastReport GIT HR IDatabase IIS JavaScript LINQ MES MiniFramework MIS NavBarControl Node.JS NPM OMS ORM PaaS POS Promise API Redis SAP SEO SQL SQLConnector TMS系统 Token令牌 VS2022 VSCode VUE WCF WebApi WebApi NETCore WebApi框架 WEB开发框架 Windows服务 Winform 开发框架 Winform 开发平台 WinFramework Workflow工作流 Workflow流程引擎 版本区别 报表 踩坑日记 操作手册 代码生成器 迭代开发记录 基础资料窗体 架构设计 角色权限 开发sce 开发技巧 开发教程 开发框架 开发平台 开发指南 客户案例 快速搭站系统 快速开发平台 秘钥 密钥 权限设计 软件报价 软件测试报告 软件简介 软件开发框架 软件开发平台 软件开发文档 软件体系架构 软件下载 软著证书 三层架构 设计模式 生成代码 实用小技巧 收钱音箱 数据锁 数据同步 微信小程序 未解决问题 文档下载 喜鹊ERP 喜鹊软件 系统对接 详细设计说明书 行政区域数据库 需求分析 疑难杂症 蝇量级框架 蝇量框架 用户管理 用户开发手册 用户控件 在线支付 纸箱ERP 智能语音收款机 自定义窗体 自定义组件 自动升级程序