0

如何处理 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();

例如,我如何处理查询中的空异常?我在网上搜索过,但其中很多都是针对 VB 的。

4

3 回答 3

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();
}
于 2012-06-22T18:49:22.317 回答
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
}
于 2012-06-22T18:49:31.063 回答
1

在您的示例中,我看到三个可能的地方可能会出现空引用异常,即GetLHDb().daily_average在 GetLHDB 为空时访问、尝试枚举daily_average为空或尝试访问空引用时的字段d我'甚至不确定这是否会发生)。

我建议将结果存储GetLHDb()到局部变量(例如,lhdb),然后对其进行空值检查。如果它不为 null,请执行 nll check-on lhdb.daily_average。如果那不为空,请继续您的查询。

更新:此外,如果d为 null,您可以使用 . 开头的 where 子句d != null

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
}
于 2012-06-22T18:59:34.890 回答