0

次のコードでは、どこに問題があるのか​​ わかりません。特定の欠員の責任者として指名されている従業員を検索しようとしています。DB には約 20 の欠員があり、約 16 人の従業員に割り当てられており、従業員テーブルには約 1801 の従業員レコードがあります。コードは常に 1801 エントリの結果を返します。

from emp in container.Employees
join p in container.Vacancies
on emp.EMPID equals p.ResponsibleOfficer into j
group j by new {k1=emp.EMPID,k2=emp.NAME} into g
select new { EmpId = g.Key.k1, Name = g.Key.k2 , Count = g.Count()}

これに似たものが欲しい

select emp.EmpId,emp.Name,Count(*) as count
from Vacancies p, Employees e
where p.ResponsibleOfficer=e.EmpId
group by e.EmpId,e.Name

どんな助けでも大歓迎です。ありがとう

4

2 に答える 2

1

を使用していますjoin ... into。正しいシーケンスに一致するものがない場合でも、元のシーケンスの各要素に対して常に1 つの結果が返されます。

jを使用して、要素のないエントリを除外できます。where

from emp in container.Employees
join p in container.Vacancies
on emp.EMPID equals p.ResponsibleOfficer into j
where j.Any()
group j by new {k1=emp.EMPID,k2=emp.NAME} into g
select new { EmpId = g.Key.k1, Name = g.Key.k2 , Count = g.Count()}

または、最初に内部結合を使用することもできますが、現在のグループ化を十分に理解していないため、何をしようとしているのかを確認できません。あなたの条項何のためですか?group by

編集: 従業員ごとにグループ化するだけの場合は、既にそれを行っています。コードを次のように変更できます。

from emp in container.Employees
join p in container.Vacancies
on emp.EMPID equals p.ResponsibleOfficer into j
where j.Any()
select new { Employee = emp, Count = j.Count()}

基本的に、(「現在の」従業員) と(その従業員に一致するすべての関連する欠員)joinという 2 つの範囲変数がスコープ内にあるとします。従業員ごとに数えようとしているだけですよね?empjj

于 2013-05-08T19:02:31.680 に答える