昨天,突然收到技术经理派发的一个小任务。就是练一下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();
}
}
}
运行结果: