我有一个父表 parentTable,它在 childTable 中可能有也可能没有子级。我希望获得任何给定父母的孩子的平均完成百分比,以及他们存在的孩子的 MAX(到期)(日期)。我的 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
我的结果集为我提供了平均值和最大值的正确值或空值的行。在这种情况下,我必须进行后续处理,因此如果我正在通过 DataTable 行执行 foreach,我可以忽略空值。但是,我试图在 Linq 中执行此操作,但无法弄清楚如何避免 System.InvalidOperationException 在 Linq 尝试将 null 转换为 double 的情况下。这是我到目前为止所尝试的。
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));
}
这是我的问题。如何让查询处理那些平均完成或最大到期(日期)为空的返回行?