Waleed Abukatab Ответов: 2

Как подсчитать количество сотрудников с помощью составных ключей


профиль
TableAId profile  prof_type  groupId   division     Department     unitBranch
 1        prof1     1           1          1            1              1
 2        prof2     2           1          1            1              1
 3        prof3     1           2          1            3              1
 4        prof4     1           1          1            3              1


персонал
TableBId   staff          groupId   division     Department     unitBranch
  1         ali            1          1            1              1
  2         Mohammad       2          1            1              1              
  3         ahmad          1          1            3              1
  4         omar           1          1            3              1
  5         othman         1          1            1              1
  6         basam          1          1            3              1
  7         saaed          3          1            3              1


Я пытаюсь создать список вроде
groupId   division     Department     unitBranch     COUNT
     1          1            1              1          2
     2          1            3              1          1
     1          1            3              1          3

Это тот самый запрос, который я пытаюсь создать, но получаю неправильные результаты.

var tes = (from a in db.Profiles
                       join b in db.Staffs on
                       new { a.GroupID, a.DivisionID, a.DepartmentID, a.UnitBranchID }
                       equals
                       new { GroupID = b.level1, DivisionID = b.level2, DepartmentID = b.level3, UnitBranchID = b.level4 } into joinedValues
                       group joinedValues by a into g
                       select new
                       {
                           Profile = g.Key.Profile,
                           count = g.Count()
                       }).ToList();


Пожалуйста ,помогите написать запрос return count of staff where (groupID ,division, department , unitbranch) in tableA = таблица B .

Что я уже пробовал:

Я устал писать запрос возвращать количество сотрудников

2 Ответов

Рейтинг:
2

Patrice T

Вопрос: почему вы используете profiles стол ?
Все поля, которые вам нужны, находятся в staff стол.

Вы можете посмотреть здесь: SQL GROUP BY оператор[^]


Waleed Abukatab

Спасибо за помощь мне, теперь у меня есть эти поля (группа, секция, единица, секция) из этих полей я хочу найти количество сотрудников в таблице персонал ,зная, что есть эти поля в (группа, секция, единица, секция) ..?

Как я могу найти решение этой проблемы в Linq .

Patrice T

Извините, но я не Линк.

Рейтинг:
0

Maciej Los

Кажется, вы должны сгруппироваться по двум полям: groupId и Department.

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]{
	new DataColumn("TableBId", typeof(int)),
	new DataColumn("staff", typeof(string)),
	new DataColumn("groupId", typeof(int)),
	new DataColumn("division", typeof(int)),
	new DataColumn("Department", typeof(int)),
	new DataColumn("unitBranch", typeof(int))
});
dt.Rows.Add(new object[]{1, "ali", 1, 1, 1, 1});
dt.Rows.Add(new object[]{2, "Mohammad", 2, 1, 1, 1});
dt.Rows.Add(new object[]{3, "ahmad", 1, 1, 3, 1});
dt.Rows.Add(new object[]{4, "omar", 1, 1, 3, 1});
dt.Rows.Add(new object[]{5, "othman", 1, 1, 1, 1});
dt.Rows.Add(new object[]{6, "basam", 1, 1, 3, 1});
dt.Rows.Add(new object[]{7, "saaed", 3, 1, 3, 1});

var data = dt.AsEnumerable()
	.GroupBy(x=>new {groupId = x.Field<int>("groupId"), Department = x.Field<int>("Department")})
	.Select(grp=> new 
	{
		groupId = grp.Key.groupId,
		division = grp.Select(y=>y.Field<int>("division")).First(),
		Department = grp.Key.Department,
		unitBranch = grp.Select(y=>y.Field<int>("unitBranch")).First(),
		Cnt = grp.Count()
	});


Результат:
groupId division Dep... unitBranch Cnt
1		1		1		1			2 
2		1		1		2			1 
1		1		3		1			3 
3		1		3		3			1