childTable に子がある場合とない場合がある親テーブル、parentTable があります。特定の親の子の平均完了率と、それらが存在する子の最大(期日) (日付) を取得しようとしています。私のSQLはこれです:
SELECT parentRecord_id, assigned_to,
(SELECT avg(complete)
FROM childTable
WHERE parent_id = parentRecord_id
and deleted IS NULL
GROUP BY parent_id),
(SELECT max(due)
FROM childTable
WHERE parent_id = parentRecord_id
and deleted IS NULL
GROUP BY parent_id
)
FROM parentTable s
WHERE s.deleted IS NULL and assigned_to IS NOT NULL
私の結果セットは、平均値と最大値の正しい値、または null の行を返します。この場合、フォローアップ処理を行う必要があるため、DataTable 行を介して foreach を実行している場合は null 値を無視できます。ただし、Linq でこれを実行しようとしていますが、Linq が null を double にキャストしようとしている System.InvalidOperationException を回避する方法がわかりません。これが私がこれまでに試したことです。
var query8 = from s in db.parentTable
where s.deleted == null
select new
{
ID = s.assigned_to,
Average =
((from t in db.childTable
where t.parent_id == s.strategy_id
group t by new { t.parent_id } into g
select new
{
a0 = g.Average(f0 => f0.complete )
}).FirstOrDefault().a0)
};
foreach (var itm in query8)
{
Console.WriteLine(String.Format("User id:{0}, Average: {1}", itm.ID, itm.Average));
}
これが私の質問です。平均完了または最大期限 (日付) が null である返された行を処理するクエリを取得するにはどうすればよいですか?