私はEmployeesテーブルを持っています:
EmployeeID | EmployeeName
---------------------------
1 | Jack
2 | Jill
3 | Roger
そして、オカレンス テーブル:
OccurrenceID | EmployeeID | Points
--------------------------------------
1 | 1 | 5
2 | 2 | 3
3 | 1 | 1
2 つのテーブルをグループ化して合計する LINQ クエリが動作しています。
groupedOccurrences = (from o in db.Occurrences.Include(o => o.Employee)
where o.OccurrenceDate >= beginDate
&& o.OccurrenceDate <= endDate
group o by o.Employee.EmployeeName into g
select new OccurrenceByQuarter
{
Name = g.Key,
Total = g.Sum(o => o.Points)
});
次の出力が生成されます。
Jack 6
Jill 3
しかし、従業員のロジャーも出力に 0 ポイントで表示されるようにしたいと考えています。次のようにLINQクエリに結合を追加しようとしました:
groupedOccurrences = (from e in db.Employees
from o in db.Occurrences
join o in db.Occurrences on e.EmployeeID equals o.EmployeeID into j1
from j2 in j1.DefaultIfEmpty()
group j2 by e.EmployeeName into g
select new OccurrenceByQuarter
{
Name = g.Key,
Total = g.Sum(o => o.Points)
});
しかし、ポイントの数が大幅に膨らんでしまいます (本来の 24 倍のように)。
public int? Total { get; set; }
また、OccurrencesByQuarter クラスで Total の宣言を に変更して、null の場合に Total が 0 を返すようにしようとしましたが、LINQ クエリを変更して含めるようにしようとするTotal = g.Sum(o => o.Points) ?? 0
と、「演算子 ?? を適用できません」というエラーが表示されます。 int 型および int 型のオペランドに".
どんな助けでも大歓迎です。