如何处理linq查询中的异常?例如,如果我有以下查询:
var query = (from d in GetLHDb().daily_average
where d.findnsave_site_id == fnsID
&& d.test_path_id == pathId
&& d.date > nTimesDays
&& d.date <= yesterday
select new
{
loadtime = d.loadtime,
created_at = d.date
}).ToArray();
例如,我如何处理查询中的null异常?我在网上搜索过,但很多都是用于VB的。
答案 0 :(得分:1)
try
{
var query = (from d in GetLHDb().daily_average
where d.findnsave_site_id == fnsID && d.test_path_id == pathId && d.date > nTimesDays && d.date <= yesterday
select new { loadtime = d.loadtime, created_at = d.date }).ToArray();
}
catch (NullReferenceException e)
{
ReportError();
}
答案 1 :(得分:1)
在您的情况下,就像您在代码中的任何其他位置一样。将.ToArray()
包裹在try/catch
块中。虽然在你的情况下我会更加防守并正确处理空值。
try
{
var query = (from d in GetLHDb().daily_average
where d.findnsave_site_id == fnsID && d.test_path_id == pathId && d.date > nTimesDays && d.date <= yesterday
select new { loadtime = d.loadtime, created_at = d.date }).ToArray();
}
catch (Exception)
{
//do what you need to
}
答案 2 :(得分:1)
在您的示例中,我看到三个可能出现空引用异常的地方,那就是当GetLHDB为空时访问GetLHDb().daily_average
,尝试枚举daily_average
为空,或者当它为空时尝试访问d
内的字段(我甚至不确定这个字段是否会发生)。
我建议将GetLHDb()
的结果存储到局部变量(例如,lhdb
),然后对其进行空值检查。如果它不为null,请执行nll check-on lhdb.daily_average
。如果不是null,请继续查询。
更新:此外,如果d
为空,您可以使用d != null
启动您的where子句。
var lhdb = GetLHDb();
if(lhdb != null && lhdb.daily_average != null)
{
var query = (from d in lhdb.daily_average
where d != null // If d can't be null, remove this
&& d.findnsave_site_id == fnsID
&& d.test_path_id == pathId
&& d.date > nTimesDays
&& d.date <= yesterday
select new
{
loadtime = d.loadtime,
created_at = d.date
}).ToArray();
// Process the results
}