zoukankan      html  css  js  c++  java
  • LINQ:数据查询

      static void Main(string[] args)
            {
                #region 匿名类型,匿名类型数组
    
                //匿名类型
                var o = new
                {
                    name = "123",
                    value = "456"
                };
    
                //匿名类型数组
                var ol = new[]{
                    new {name="123",value="456"},
                    new {name="123",value="456"},
                    new {name="123",value="456"},
                    new {name="123",value="456"},
                };
    
                #endregion
    
                #region Linq函数   Where ,WhereMany,Join,GroupJoin,OrderBy()和ThenBy()
                //查询结果过滤 Where函数
                List<int> list1 = new List<int>() { 6, 4, 2, 7, 9, 0 };
                list1.Where(c => c > 5);
    
    
                //Many,可以理解为cross join
                List<int> ManyList1 = new List<int>() { 1, 2, 3, 4, 5, 6 };
                List<int> ManyList2 = new List<int>() { 6, 4, 2, 7, 9, 0 };
    
                var queryMany = ManyList1.SelectMany(c => ManyList2);
    
                foreach (var item in queryMany)
                    Console.WriteLine("{0}", item);
    
                var selector1 = from item in ManyList1
                                from item2 in ManyList2
                                select new { a = item, b = item2 };
    
                foreach (var q in selector1)
                    Console.WriteLine("{0}", q);
                var selector2 = list1.SelectMany(x => ManyList2, (a, b) => new { a, b });
    
                //联接数据join和GroupJoin
                var queryJoin = from item in ManyList1
                                join item2 in ManyList2 on item equals item2
                                select item2;
    
    
    
                //使用 Linq Join
                var queryJoin1 = ManyList1.Join(ManyList2, item1 => item1, item2 => item2, (item1, item2) => item2);
    
                foreach (var qu in queryJoin1)
                    Console.WriteLine("{0}", qu);
    
    
    
                //GroupbyJoin
                var queryGroupJoin = ManyList1.GroupJoin(ManyList2, item1 => item1, item2 => item2, (item1, item2) => new { v = item1, c = item2.Count() });
                foreach (var GroupJoin in queryGroupJoin)
                    Console.WriteLine("{0}", GroupJoin);
    
                //数据排序 OrderBy()和ThenBy()
                var nameValues = new[]
                {
                        new {name="Allen",value=65},
                        new {name="Abbey",value=120},
                        new {name="Slong",value=330},
                        new {name="George",value=213},
                        new {name="Meller",value=329},
                        new {name="Mary",value=192},
                        new {name="Sue",value=200},  
                };
    
                var sortedNames = nameValues.OrderBy(c => c.name);
                var sortedValues = nameValues.OrderBy(c => c.value);
                var str = new string('-', 10);
                Console.WriteLine("---OrderBy()Demo sortedNames");
                foreach (var item in sortedNames)
                    Console.WriteLine("name:{0},value:{1}", item.name, item.value);
    
    
                Console.WriteLine("---OrderBy()Demo SortedValues");
                foreach (var item in sortedValues)
                    Console.WriteLine("name:{0},value:{1}", item.name, item.value);
    
                //多重排序,如果要设置多重排序条件,务必使用OrderBy()加上ThenBy()的组合,若使用
                //OrderBy()+OrderBy()会使排序被执行两次,最终的结果会使最后一个orderBy()所产生的结果
                var sortedByNameValues = nameValues.OrderBy(x => x.name).ThenBy(x => x.value);
    
                var sortedByValueNames = nameValues.OrderBy(x => x.value).ThenBy(x => x.name);
    
                Console.WriteLine("---OrderBy()Demo sortedByNameValues");
                foreach (var item in sortedByNameValues)
                    Console.WriteLine("name:{0},value:{1}", item.name, item.value);
    
    
                Console.WriteLine("---OrderBy()Demo sortedByValueNames");
    
                foreach (var item in sortedByValueNames)
                    Console.WriteLine("name:{0},value:{1}", item.name, item.value);
    
    
    
                var sortedOrderByNameValues = nameValues.OrderBy(x => x.name).OrderBy(x => x.value);
    
                var sortedOrderByValueNames = nameValues.OrderBy(x => x.value).OrderBy(x => x.name);
    
                Console.WriteLine("---OrderBy()Demo sortedOrderByNameValues");
                foreach (var item in sortedOrderByNameValues)
                    Console.WriteLine("name:{0},value:{1}", item.name, item.value);
    
    
                Console.WriteLine("---OrderBy()Demo sortedOrderByValueNames");
    
                foreach (var item in sortedOrderByValueNames)
                    Console.WriteLine("name:{0},value:{1}", item.name, item.value);
    
    
                #endregion
    
    
                #region  获取集合 ToArray,ToList Skip,SkipWhile,Take,TakeWhile
                var arrayOutput = nameValues.ToArray();
                var ListOutput = nameValues.ToList();
    
                var dictOutput1 = nameValues.ToDictionary(x => x.name);
    
                var dictOutput2 = nameValues.ToDictionary(x => x.name, x => x.value);
    
    
    
                int[] arrSkip = { -35, 53, 5, -34, 56, 45, 34, 5, -34, 45, 2, 3, 6 };
    
                var querySkip = arrSkip.Skip(5);
                Console.WriteLine("去除前面5个");
                foreach (var item in querySkip)
                    //结果为: 45, 34, 5, -34, 45, 2, 3, 6
                    Console.WriteLine(item);
                int[] number = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 12, 0 };
                var allButFirst3Numbers = number.SkipWhile(n => n % 3 != 0);
                foreach (var skipItem in allButFirst3Numbers)
                    Console.WriteLine(skipItem);
    
                //take
                int[] numbersTake = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
                var first3 = numbersTake.Take(3); //从第一个元素开始,只获取前面三个
                Console.WriteLine("First 3 numbers:");
                foreach (var n in first3)
                {
                    Console.WriteLine(n);//结果 5 4 1
                }
                //TakeWhile   从第一个元素开始,一直比较,直到比较到条件结束为止,false就停止继续比较了
                var firstNumbers6 = numbersTake.TakeWhile(n => n < 6);
                foreach (var n in firstNumbers6)
                {
                    Console.WriteLine(n);//结果为 5 4 1 3
                }
                #endregion
    
                #region 集合的运算  合集Union,并集 intersect,补集except,唯一 distinct
                int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
                int[] numbersB = { 1, 3, 5, 7, 8 };
                int[] numberSeries = { 2, 2, 3, 5, 5 };
                //Union   合集 当2个数据源相同时,则保留一个   
                var unionResult = numbersA.Union(numbersB);
                //Intersect 交集 将A的值和B对比,将A B相同的A值则保留
                var intersectResult = numbersA.Intersect(numbersB);
                //Intersect 补集 将A的值和B对比,将A B不相同的A值则保留
    
    
                var distinctValues = numberSeries.Distinct();
                var exceptResult = numbersA.Except(numbersB);
                Console.WriteLine("unionResult");
                foreach (var q in unionResult)
                {
                    Console.WriteLine(q);
    
                }
                Console.WriteLine("intersect");
                foreach (var q in intersectResult)
                {
                    Console.WriteLine(q);
    
                }
                Console.WriteLine("except");
                foreach (var q in exceptResult)
                {
                    Console.WriteLine(q);
                }
                Console.WriteLine("distinct");
                foreach (var q in distinctValues)
                {
                    Console.WriteLine(q);
                }
                #endregion
    
                #region 访问元素 IEnumberale<T>本身就是集合对象,所以针对集合对象所需要的元素访问
                var firstLastItems = new[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
    
                string firstContains = firstLastItems.First(s => s.Contains('o'));
                string lastContains = firstLastItems.Last(s => s.Contains('o'));
                Console.WriteLine("First:{0}", firstContains);
                Console.WriteLine("Last:{0}", lastContains);
                string itemAtThree = firstLastItems.ElementAt(3);
                string indexAtSix = firstLastItems.ElementAt(5);
                Console.WriteLine("itemAtThree:{0}", itemAtThree);
                Console.WriteLine("indexAtSix:{0}", indexAtSix);
                #endregion
    
                #region 聚合与汇总 Max, Min, Sum, Average,Aggregate
                double myBalance = 100.0;
                int[] withdrawItem = { 20, 10, 40, 50, 10, 70, 30 };
                double balance = withdrawItem.Aggregate(myBalance, (originbalance, nextWithdrawal) =>
                {
                    Console.WriteLine("originbalance:{0},nextWithdrawal:{1}", originbalance, nextWithdrawal);
                    Console.WriteLine("withdrawItem status:{0}", (nextWithdrawal <= originbalance) ? "OK" : "FALLED");
                    return ((nextWithdrawal <= originbalance) ? (originbalance - nextWithdrawal) : originbalance);
                });
                Console.WriteLine("Ending balance:{0}", balance);
                #endregion
                Console.ReadLine();
            }
    生命中最值得欣慰的,莫过于一觉醒来,你还在身旁
  • 相关阅读:
    第02组 Beta冲刺(4/5)
    第02组 Beta冲刺(3/5)
    第02组 Beta冲刺(2/5)
    第02组 Beta冲刺(1/5)
    第02组 Alpha事后诸葛亮
    第02组 Alpha冲刺(6/6)
    第02组 Alpha冲刺(5/6)
    第02组 Alpha冲刺(4/6)
    第02组 Alpha冲刺(3/6)
    2020系统综合实践1 微服务与Docker 基本入门
  • 原文地址:https://www.cnblogs.com/chaonuanxi/p/12656065.html
Copyright © 2011-2022 走看看