• SQO (标准查询运算符)方法 & Linq To Object


    #region SQO (标准查询运算符) 方法
    #region Where() Find() FindAll() FirstOrDefault()等方法
    static void c01where()
    {
    var list = GetPigList();
    //1.0 获取当前list集合中的符合条件的第一条数据
    list.Sort((p, n) => p.Age - n.Age);
    var pig = list.FirstOrDefault(p => p.Age > 2);
    // pig.Say();
    
    //2.0 first 获取当前list集合中的符合条件的第一条数据,如果没有找到则抛出异常
    var pig1 = list.First();
    
    //3.0 FindAll() 找到所有符合条件的数据,并全部返回
    var newlist1 = list.FindAll(p => p.Age > 3);
    
    //4.0 Find() 找到所有符合条件的数据,并返回第一条数据
    var pig2 = list.Find(c => c.Id > 0);
    //pig2.Say();
    
    //5.0 Where() 
    //链式编程,从list集合中获取id==2的数据集合,通过foreach遍历新的数据集合,将数据打印出来
    var pig3 = list.FindAll(p => p.Id == 2).FirstOrDefault();
    
    //和sql很像
    //select * from list where age>2 and name like '%猪%'
    //list.Where(p => p.Age > 2 && p.Name.Contains("猪")).ToList().ForEach(c => c.Say());
    
    //lambda表达式的多条件或组合
    list.Where(c => c.Id == 1 || c.Id == 2).ToList().ForEach(c => c.Say());
    } 
    #endregion
    
    #region SQO 方法之 排序方法 OrderBy(), OrderByDescending()的使用
    static void c01OrderBy()
    {
    var list = GetPigList();
    //1.0 对list集合进行id的正序排列
    list.OrderBy(c => c.Id).ToList().ForEach(c => c.Say());
    
    //2.0 对list集合进行id的倒序排列
    list.OrderByDescending(c => c.Id).ToList().ForEach(c => c.Say());
    
    } 
    #endregion
    
    #region 链式编程
    static void c01LinkCode()
    {
    var list = GetPigList();
    list.Where(c => c.Id > 2).Where(c => c.Age > 10).OrderBy(c => c.Age).ToList().ForEach(c => Console.WriteLine(c.ToString()));
    } 
    #endregion
    
    #region 多条件排序 ThenByDescending() ,ThenBy() 
    static void c01ThenBy()
    {
    var pigList = GetPigList();
    //多条件排序:
    //第一个排序条件可以使用OrderBy(),OrderByDescending()
    //但是第二和以后的其他排序条件则必须使用ThenByDescending() ,ThenBy() 进行排序
    // 语法和sql很像
    pigList.OrderBy(c => c.TypeId).ThenByDescending(c => c.Id).ToList().ForEach(c => c.Say());
    }
    
    #endregion
    
    #region Any() Count() 的用法
    static void c01Other()
    {
    var list = GetPigList();
    Console.WriteLine(list.Any(c => c.Age > 12)); //true
    Console.WriteLine(list.Any(c => c.Id < 0)); //false
    
    Console.WriteLine(list.Count(c => c.Id < 0));//0
    Console.WriteLine(list.Count(c => c.Age > 0));//3
    } 
    #endregion
    
    #region Select() 投影方法的演示,作用:将一个集合投影到另外一个集合(重点)
    static void c01Select()
    {
    //获取list集合中的id和name 作为一个新的集合返回
    var list = GetPigList();
    //利用Select() 将list集合中的id name 属性的值投影成匿名类返回
    var newlist = list.Select(c => new { c.Id, c.Name }).ToList();
    newlist.ForEach(c => Console.WriteLine(c.ToString()));
    } 
    #endregion
    
    #region 利用Skip().Take()方法实现分页查询(重点)
    static void c01GetListByPage()
    {
    int tcount = 0;
    GetListByPage(3, 2, out tcount);
    }
    
    static List<Pig> GetListByPage(int pageIndex, int pageSize, out int totalcount)
    {
    List<Pig> list = GetPigList();
    //从集合中分页获取的数据
    int skipCount = (pageIndex - 1) * pageSize;
    totalcount = list.Count();
    //Skip:从集合中跳过指定的行数,Take:从跳过的指定行数下一行开始取指定的数据行数
    return list.Skip(skipCount).Take(pageSize).ToList();
    } 
    #endregion
    
    #region join() 两个集合连接查询,模拟实现sql中的inner join(交叉连接)
    static void c01Join()
    {
    var piglist = GetPigList();
    var typelist = GetTypeList();
    
    //1.0 利用join方法将两个集合联合查询,最终得到piglist中的Id,name,同时获取typelist中的typename
    //sql 语句:select c.Id,c.Name,t,TypeName from piglist c inner join typelist t on (c.TypeId=t.TypeId)
    var newlist = piglist.Join(typelist, c => c.TypeId, t => t.TypeId, (c, t) => new { c.Id, c.Name, t.TypeName }).ToList();
    newlist.ForEach(c => Console.WriteLine(c.ToString()));
    } 
    #endregion
    
    #region GroupBy() 分组查询
    static void c01GroupBy()
    {
    var list = GetPigList();
    //1.0 调用GroupBy() 扩展方法 进行typeId的分组操作
    //select TypeID from list group by TypeId
    var groupList = list.GroupBy(c => c.TypeId).ToList();
    groupList.ForEach(c =>
    {
    Console.WriteLine("分组号:" + c.Key + "------");
    c.ToList().ForEach(d => d.Say());
    });
    } 
    #endregion
    
    #endregion

     2.0 Linq To Object

    #region 10.0 Linq to object (linq to sql, linq to xml)
    
            #region linq Where 的写法
            static void c01LinqWhere()
            {
                var list = GetPigList();
                //SQO写法
                var newlist = list.Where(c => c.Age == 12 && c.Name.Contains(""));
                //linq的写法
                //sql 语句:select c.Id,c.Name from list c where c.Age==12 and c.Name like '%猪%'
                var newlist2 = (from c in list
                                where c.Age == 12 && c.Name.Contains("")
                                select new { c.Id, c.Name }).ToList();
    
                //  newlist2.ForEach(c => Console.WriteLine(c.ToString()));
    
                var newlist3 = (from c in list
                                where c.Name.Contains("") && c.Id > 3
                                select new { c.Id, c.Name }).ToList();
                newlist3.ForEach(c => Console.WriteLine(c.ToString()));
    
            } 
            #endregion
    
            #region join() 的linq写法
            static void c01linqJoin()
            {
                var pigList = GetPigList();
                var typeList = GetTypeList();
    
                //linq的联表查询
                (from c in pigList
                 join t in typeList
                     on c.TypeId equals t.TypeId
                 select new { c.Id, c.Name, t.TypeName }).ToList().ForEach(c => Console.WriteLine(c.ToString()));
            } 
            #endregion
    
            #region GroupBy 的linq写法
            static void c01LinqGroupBy()
            {
                var list = GetPigList();
                (from c in list
                 group c by c.TypeId).ToList().ForEach(c =>
                     {
                         Console.WriteLine("---------分组号:" + c.Key + "---------");
                         c.ToList().ForEach(d => d.Say());
                     });
            }
            
            #endregion
    
            #region Linq的排序写法
            static void c01Sort()
            {
                var list = GetPigList();
    
                (from c in list
                 orderby c.Id descending
                 orderby c.Age descending
                 select c).ToList().ForEach(c => Console.WriteLine(c.ToString()));
            } 
            #endregion
            #endregion

    3.0 系统内置委托

    #region 系统内置委托 & lambda表达式
            #region 系统内置委托之 Predicate,接收一个泛型参数,返回一个bool值
            /// <summary>
            /// 系统内置委托之 Predicate,接收一个泛型参数,返回一个bool值
            /// </summary>
            static void C08Predicate()
            {
                List<Pig> list = GetPigList();
                // 1.0.0查询当前年龄大于四岁的对象以新集合的形式返回
                var newlist = list.FindAll(query);
    
                // 1.0.1 利用匿名委托来代替自定义方法query
                var newlist2 = list.FindAll(delegate(Pig pig) { return pig.Age > 4; });
    
                //1.0.2 利用lambda表达式代替匿名委托 goes to
                var newlist3 = list.FindAll(c => c.Age > 4);
            }
            #endregion
    
            #region 系统内置委托之 Action ,接受一个泛型参数,无返回值
            /// <summary>
            /// 系统内置委托之 Action ,接受一个泛型参数,无返回值
            /// </summary>
            static void c08Action()
            {
                var list = GetPigList();
                list.ForEach(c => c.Say());
            }
            #endregion
    
            #region Comparison接收两个相同类型的参数,返回一个整数
            /// <summary>
            /// Comparison接收两个相同类型的参数,返回一个整数
            /// </summary>
            static void c08Comparison()
            {
                var list = GetPigList();
                //1.0 对list进行排序
                list.Sort((pre, next) => next.Id - pre.Id);
    
                //2.0 遍历输出
                list.ForEach(c =>
                    c.Say());
            }
            #endregion
    
            #region 系统内置委托Func()
            /// <summary>
            /// 系统内置委托Func()
            /// </summary>
            static void c08Func()
            {
                var list = GetPigList();
                //利用func<T,Result>进行集合数据筛选操作
                var newlist = list.Where(c => c.Age > 4).ToList();
                newlist.ForEach(c => c.Say());
            }
            #endregion 
            #endregion
  • 相关阅读:
    【开发工具 idea】值得推荐的15款idea插件
    【python pip】一招解决pip下载过慢问题
    【python pip】一招解决移动python安装路径pip不可用问题
    xmake新增对Qt编译环境支持
    xmake入门,构建项目原来可以如此简单
    xmake新增对Cuda代码编译支持
    不同编译器对预编译头文件的处理
    xmake v2.1.9版本发布,增加可视化图形菜单配置
    xmake-vscode插件开发过程记录
    xmake-vscode插件开发过程记录
  • 原文地址:https://www.cnblogs.com/miaoying/p/5444323.html
Copyright © 2020-2023  润新知