110,549
社区成员
发帖
与我相关
我的任务
分享
class info
{
public int ID; //职工ID
public float money;
public string department;
}
var list = new List<info>
{
new info{ID= 1,money= 100,department="部门1"},
new info{ID= 2,money= 100,department="部门3"},
new info{ID= 3,money= 80,department="部门3"},
new info{ID= 4,money= 80,department="部门2"},
new info{ID= 5,money= 80,department="部门3"},
new info{ID= 6,money= 80,department="部门1"},
new info{ID= 7,money= 80,department="部门2"},
new info{ID= 8,money= 80,department="部门3"},
new info{ID= 9,money= 80,department="部门1"},
new info{ID= 10,money= 80,department="部门3"},
};
var moneys = list.GroupBy(x => x.money).OrderByDescending(x => x.Key).Select(x => x.Key).Take(3).ToList();
while(moneys.Count < 3)
moneys.Add(0);
var query = (from depart in list.Select(x=>x.department).Distinct() select new
{
部门 = depart,
前百分之十的人数 = list.Where(x=>x.department == depart && x.money >= moneys[0]).Count(),
前百分之三十的人数 = list.Where(x => x.department == depart && x.money >= moneys[2]).Count()
}).ToList();
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.jisuan();
}
public void jisuan()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID",typeof(int));
dt.Columns.Add("money", typeof(double));
dt.Columns.Add("department", typeof(string));
dt.Rows.Add(1,"100","部门1");
dt.Rows.Add(2, "80", "部门3");
dt.Rows.Add(3, "70", "部门3");
dt.Rows.Add(4, "50", "部门2");
dt.Rows.Add(5, "40", "部门3");
dt.Rows.Add(6, "30", "部门1");
dt.Rows.Add(7, "20", "部门2");
dt.Rows.Add(8, "10", "部门3");
dt.Rows.Add(9, "5", "部门1");
dt.Rows.Add(10, "3", "部门3");
dt.DefaultView.Sort = "money desc";
dt = dt.DefaultView.ToTable();
int bm1 = 0,bm11=0;
int bm2 = 0,bm22=0;
int bm3 = 0,bm33=0;
DataTable dt2 = new DataTable();
dt2.Columns.Add("部门",typeof(string));
dt2.Columns.Add("前0.1", typeof(int));
dt2.Columns.Add("前0.3", typeof(int));
for(int i=0;i<dt.Rows.Count*0.1;i++)
{
if (dt.Rows[i]["department"] == "部门1")
{
bm1++;
}
if (dt.Rows[i]["department"] == "部门2")
{
bm2++;
}
if (dt.Rows[i]["department"] == "部门3")
{
bm3++;
}
}
for (int i = 0; i < dt.Rows.Count * 0.3; i++)
{
if (dt.Rows[i]["department"] == "部门1")
{
bm11++;
}
if (dt.Rows[i]["department"] == "部门2")
{
bm22++;
}
if (dt.Rows[i]["department"] == "部门3")
{
bm33++;
}
}
dt2.Rows.Add("部门1",bm1,bm11);
dt2.Rows.Add("部门2", bm2, bm22);
dt2.Rows.Add("部门3", bm3, bm33);
}
}
var list = new List<info>
{
new info{ID= 1,money= 100,department="部门1"},
new info{ID= 2,money= 80,department="部门3"},
new info{ID= 3,money= 70,department="部门3"},
new info{ID= 4,money= 50,department="部门2"},
new info{ID= 5,money= 40,department="部门3"},
new info{ID= 6,money= 30,department="部门1"},
new info{ID= 7,money= 20,department="部门2"},
new info{ID= 8,money= 10,department="部门3"},
new info{ID= 9,money= 5,department="部门1"},
new info{ID= 10,money= 3,department="部门3"},
};
var query = from dp in list.Select(x => x.department).Distinct()
join _10 in list.Take(1).GroupBy(x => x.department)
.Select(g => new
{
department = g.Key,
Count = g.Count()
}) on dp equals _10.department into _10T
from t_10 in _10T.DefaultIfEmpty()
join _30 in list.Take(3).GroupBy(x => x.department)
.Select(g => new
{
department = g.Key,
Count = g.Count()
}) on dp equals _30.department into _30T
from t_30 in _30T.DefaultIfEmpty()
select new
{
department = dp,
T_10 = t_10?.Count??0,
T_30 = t_30?.Count??0
};
foreach (var tmp in query)
{
Console.WriteLine("{0} {1} {2}", tmp.department, tmp.T_10, tmp.T_30);
}
static List<User> list = new List<User>()
{
new User(){ID=1, Name="部门1",Age=100},
new User(){ID=2,Name="部门3",Age=80},
new User(){ID=3,Name="部门3",Age=70},
new User(){ID=4,Name="部门2",Age=50},
new User(){ID=5,Name="部门3",Age=40},
new User(){ID=6,Name="部门1",Age=30},
new User(){ID=7,Name="部门2",Age=20},
new User(){ID=8,Name="部门3",Age=10},
new User(){ID=9,Name="部门1",Age=5},
new User(){ID=10,Name="部门3",Age=3},
};
static void Main(string[] args)
{
var q = (from b in list.Select(x => x.Name).Distinct()
select new
{
Department = b,
Count1 = list.Take(1).Join(list.Select(x => x.Name).Distinct(), x => x.Name, y => y, (x, y) => new { Name = x.Name, Age = x.Age }).Where(x=>x.Name==b).Count(),
Count2 = list.Take(3).Join(list.Select(x => x.Name).Distinct(), x => x.Name, y => y, (x, y) => new { Name = x.Name, Age = x.Age }).Where(x => x.Name == b).Count(),
})
.ToList();
Console.ReadLine();
}
var list = new List<info>
{
new info{ID= 1,money= 100,department="部门1"},
new info{ID= 2,money= 80,department="部门3"},
new info{ID= 3,money= 70,department="部门3"},
new info{ID= 4,money= 50,department="部门2"},
new info{ID= 5,money= 40,department="部门3"},
new info{ID= 6,money= 30,department="部门1"},
new info{ID= 7,money= 20,department="部门2"},
new info{ID= 8,money= 10,department="部门3"},
new info{ID= 9,money= 5,department="部门1"},
new info{ID= 10,money= 3,department="部门3"},
};
var list1 = list.Select(x => x.department).Distinct().GroupJoin(list.OrderBy(m => m.money)
.Take(list.Count()/10)
.GroupBy(m => m.department)
.Select(x => new { department = x.Key, Count_10 = x.Count()}), T1 => T1, T2 => T2.department, (T1, T2) => new
{
department = T1,
Count_10 = T2.Sum(x=>x.Count_10)
})
.GroupJoin(list.OrderBy(m => m.money)
.Take(list.Count() / 10 * 3)
.GroupBy(m=>m.department)
.Select(x => new { department = x.Key, Count_30 = x?.Count()??0 }), T1 => T1.department, T2 => T2.department, (T1, T2) => new
{
depatment = T1.department,
Count_10 = T1.Count_10,
Count_30 = T2.Sum(x => x.Count_30)
}).ToList()