LINQ示例代码

  public class TEST
    {
        /*
         * 统计一个字符串每个字母出现的频率(忽略大小写),然后
         * 按照从高到低的顺序输出出现频率高于2次的单词和其出现的频率
         * LINQ的写法跟sql相似
         * */
        public static void FindLetterAppearOverTwoTimes()
        {

            string str = "abaacdlkjljo";
            var items = str.Where(c => char.IsLetter(c))//过滤非字母
                .Select(c => char.ToLower(c))//大写转小写
                .GroupBy(c => c)//根据字母进行分组
                .Where(g => g.Count() > 2)//过滤掉出现次数<=2
                .OrderByDescending(g => g.Count())//按次数排序
                .Select(g => new { Char = g.Key, Count = g.Count() });
            foreach (var item in items)
            {
                Console.WriteLine(item);
            }
        }
        /// <summary>
        /// 让数组中大于10的数
        /// </summary>
        public static void FindNumsOver10()
        {
            int[] nums = new int[] { 3, 5, 8, 7, 9, 5, 4, 311, 54, 58 };
            IEnumerable<int> targetNum = nums.Where(s => s > 10);
            foreach (var item in targetNum)
            {
                Console.WriteLine(item);
            }
        }
        #region 常见的扩展方法
        private static List<Employee> empList = new List<Employee>()
        {
            new Employee (){Id=1001,Name="Jack",Age=10,Gender=true,Salary=5000},
            new Employee (){Id=1002,Name="Jim",Age=20,Gender=false,Salary=800},
            new Employee (){Id=1003,Name="Tom",Age=30,Gender=true,Salary=800},
            new Employee (){Id=1004,Name="Jerry",Age=40,Gender=false,Salary=800},
            new Employee (){Id=1005,Name="Nancy",Age=50,Gender=true,Salary=800},
            new Employee (){Id=1006,Name="Lily",Age=60,Gender=true,Salary=8000},
        };

        public static void FindTargetByWhere()
        {
            IEnumerable<Employee> emp = empList.Where(e => e.Age > 30);
            foreach (var item in emp)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("--------------");
            Console.WriteLine(empList.Count());
            Console.WriteLine(empList.Count(e => e.Age > 20));
            Console.WriteLine(emp.Any(e => e.Salary > 3000));
        }
        /// <summary>
        /// Single 有且只有一条
        /// SingleOrDefault最多一条满足要求的数据
        /// Frist 至少有一条,返回第一条
        /// FirstOrDefault 返回第一条或者默认值;
        /// </summary>
        public static void GetSingleResult()
        {
            IEnumerable<Employee> item = empList.Where(e => e.Name == "Jerry");
            Employee e = item.Single();
            Employee e2 = empList.Single(e => e.Name == "Jerry");
            Employee e3 = empList.SingleOrDefault(e => e.Name == "Jeer");
            Employee e4 = empList.First(e => e.Age != 11);
            Employee e5 = empList.FirstOrDefault(e => e.Age > 20);
            Console.WriteLine(e3);
            Console.WriteLine(e4);
            Console.WriteLine(e5);
        }
        /// <summary>
        /// Order by的用法
        /// </summary>
        public static void LinqOrderby()
        {
            IEnumerable<Employee> item2 = empList.OrderBy(e => e.Age);
            foreach (var item in item2)
            {
                Console.WriteLine("正序");
                Console.WriteLine(item);
            }
            IEnumerable<Employee> item3 = empList.OrderByDescending(e => e.Age);
            foreach (var item in item3)
            {
                Console.WriteLine("倒序");
                Console.WriteLine(item);
            }
        }

        /// <summary>
        /// skip和take的用法
        /// </summary>
        public static void LinqSkipTake()
        {
            var items = empList.Skip(3).Take(2);
            foreach (var item in items)
            {
                Console.WriteLine(item);
            }
        }

        /// <summary>
        /// 聚合函数的使用
        /// </summary>
        public static void LinqGROUP()
        {
            int a = empList.Max(e => e.Age);
            Console.WriteLine(a);
            double a2 = empList.Where(e => e.Salary > 0).Average(e => e.Age);
            Console.WriteLine(a2);

            var items = empList.GroupBy(e => e.Age);
            foreach (var item in items)
            {
                Console.WriteLine(item);
                foreach (var e in item)
                {
                    Console.WriteLine(e);
                }
            }

        }


        /// <summary>
        /// 投影的使用
        /// </summary>
        public static void LinqWithProjection()
        {
            IEnumerable<string> item1 = empList.Where(e => e.Age > 30).Select(e => e.Name);
            foreach (string s in item1)
            {
                Console.WriteLine(s);
            }
            IEnumerable<DOG> dogs = empList.Where(e => e.Age > 30).Select( e=>new DOG() { Id=e.Id,NickName=e.Name});
            foreach (var s in dogs)
            {
                Console.WriteLine(s);
            }
           

        }
     
        /// <summary>
        /// Linq和匿名方法
        /// </summary>
        public  static  void LinqWithanonymity()
        {

            ///匿名类型
            var obj = new { Name = "aaa", Id = 10100, Url = "http://www.baidu.com" };
            Console.WriteLine(obj.Name + obj.Id + obj.Url);

            var item2 = empList.Where(e => e.Age > 20).Select(e => new
            {
                Name = e.Name,
                Id = e.Id
            });

            foreach (var item in item2)
            {
                DOG dog = new DOG() { Id = item.Id, NickName = item.Name };
                Console.WriteLine(dog);

            }
            var item3 = empList.ToLookup(e => e.Age);
        }
        public  static void LINQWithChainCall()
        {
            var items = empList.Where(e => e.Id > 2).GroupBy(e => e.Age).OrderBy(g => g.Key).
                Take(3)//g=IGrouping(int,Employee)
                .Select(g => new { NL = g.Key, RS = g.Count(), PJ = g.Average(e => e.Salary) });
            foreach (var item in items)
            {
                Console.WriteLine(item.NL +"  " +item.RS + "  " +item.PJ);
            }
        }
        #endregion
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值