【C#】基本 LINQ 查询操作

昨天,突然收到技术经理派发的一个小任务。就是练一下C#的LINQ,给出如下十道题目:

代码如下:

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

namespace LinqTest
{
    class Program
    {
        static void Main(string[] args)
        {
            List<User> users = new List<User>();
            List<Dept> depts = new List<Dept>();

            for (int i = 1; i < 6; i++)
            {
                var user = new User
                {
                    userid = i,
                    deptid = i % 2 == 0 ? 1 : 2,
                    username = i % 2 == 0 ? "小明" + i.ToString() : "小红" + i.ToString(),
                    age = i * 10,
                    sex = i % 2 == 0 ? "男" : "女"
                };
                Random rm = new Random();
                user.money = (decimal)Math.Round(3000.0, 2) + i * 1000;
                if (i == 1)
                {
                    user.money += 200;
                }
                users.Add(user);
            }
            var dept1 = new Dept
            {
                deptid = 1,
                deptname = "研发部"
            };
            depts.Add(dept1);
            var dept2 = new Dept
            {
                deptid = 2,
                deptname = "销售部"
            };
            depts.Add(dept2);

            foreach (var item in users)
            {
                Console.WriteLine("所属部门:{0},员工姓名:{1},年龄:{2},性别:{3},工资:{4}", item.deptid, item.username, item.age, item.sex, item.money);

            }
            Console.WriteLine();

            foreach (var item in depts)
            {
                Console.WriteLine("{0} {1}", item.deptid, item.deptname);

            }
            Console.WriteLine();

            //部门总人数
            var queryDeptCount = from user in users
                                 select user.userid;
            Console.WriteLine("部门总人数:{0}", queryDeptCount.Count());
            Console.WriteLine();
            //每个部门总人数
            var queryEveryDeptCount = from user in users
                                      join dept in depts on user.deptid equals dept.deptid
                                      group dept by dept.deptname;
            Console.WriteLine("每个部门总人数:");
            foreach (var item in queryEveryDeptCount)
            {
                Console.WriteLine("{0}:{1}", item.Key, item.Count());
            }
            Console.WriteLine();
            //所有money>5000的人数
            var queryMoney5000 = from user in users
                                 where user.money > 5000
                                 select user;
            Console.WriteLine("所有money>5000的人数:{0}", queryMoney5000.Count()); Console.WriteLine();
            //所有money>5000的人员信息
            var queryMoney5000Info = from user in users
                                     join dept in depts on user.deptid equals dept.deptid
                                     where user.money > 5000
                                     select new { user, dept.deptname };
            foreach (var item in queryMoney5000Info.Distinct())
            {
                Console.WriteLine("所属部门:{0},员工姓名:{1},年龄:{2},性别:{3},工资:{4}", item.deptname, item.user.username, item.user.age, item.user.sex, item.user.money);
            }
            Console.WriteLine();
            //每个部门money>6000的人数
            var queryEveryMoney5000 = from user in users
                                      join dept in depts on user.deptid equals dept.deptid
                                      where user.money > 6000
                                      group dept by dept.deptname;
            Console.WriteLine("每个部门money>6000的人数:");
            foreach (var item in queryEveryMoney5000)
            {
                Console.WriteLine("{0}:{1}", item.Key, item.Distinct().Count());
            }
            Console.WriteLine();
            //每个部门money>6000的人员信息
            var queryEveryMoney5000Info = from user in users
                                          join dept in depts on user.deptid equals dept.deptid
                                          where user.money > 6000
                                          //group dept by dept.deptname
                                          select new { user, dept.deptname };
            foreach (var item in queryEveryMoney5000Info)
            {
                Console.WriteLine("所属部门:{0},员工姓名:{1},年龄:{2},性别:{3},工资:{4}", item.deptname, item.user.username, item.user.age, item.user.sex, item.user.money);
            }
            Console.WriteLine();
            //员工平均money
            var queryEveryAvgMoney = from user in users
                                     select user.money;
            Console.WriteLine("员工平均money:{0}", queryEveryAvgMoney.Average());
            Console.WriteLine();
            //每个部门员工平均money
            var queryEveryDeptAvgMoney = from user in users
                                         join dept in depts on user.deptid equals dept.deptid
                                         group user by dept.deptname into n
                                         select new { n.Key, avg = from user in n select user.money };
            Console.WriteLine("每个部门员工平均money:");
            foreach (var item in queryEveryDeptAvgMoney)
            {
                Console.WriteLine("{0}员工平均money:{1}", item.Key, item.avg.Average());
            }
            Console.WriteLine();
            //>平均money的人员
            var queryGtAvgMoney = from user in users
                                  join dept in depts on user.deptid equals dept.deptid
                                  where user.money > (from user2 in users select user2.money).Average()
                                  select new { user, dept.deptname };
            foreach (var item in queryGtAvgMoney)
            {
                Console.WriteLine("所属部门:{0},员工姓名:{1},年龄:{2},性别:{3},工资:{4}", item.deptname, item.user.username, item.user.age, item.user.sex, item.user.money);
            }
            Console.WriteLine();

            //每个部门>平均money的人员,另外age(20-30)
            var queryEveryDeptGtAvgMoney = from user in users
                                           join dept in depts on user.deptid equals dept.deptid
                                           where user.age > 40 & user.age < 80 & user.money > (from user2 in users select user2.money).Average()
                                           group user by dept.deptname into n
                                           select new { n.Key, user = from user in n select user };
            foreach (var item in queryEveryDeptGtAvgMoney)
            {
                foreach (var temp in item.user)
                {
                    Console.WriteLine("所属部门:{0},员工姓名:{1},年龄:{2},性别:{3},工资:{4}", item.Key, temp.username, temp.age, temp.sex, temp.money);
                }
            }
            Console.WriteLine();

            Console.ReadKey();

        }
    }
}

运行结果:

 
发布了62 篇原创文章 · 获赞 14 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Yanzudada/article/details/103910259