C# LINQ Lambda仅在存在时选择

C# LINQ Lambda仅在存在时选择,c#,linq,nhibernate,lambda,C#,Linq,Nhibernate,Lambda,我使用的是NHibernate,它是通过职责和服务抽象出来的。我们不允许延迟加载属性,因此必须在查询中选择它们 我的问题是,我试图从Answers表中获取最新的响应号,但在许多情况下,该对象可能不存在,因此我只能获取Null引用异常,或者“代码应该是不可访问的”异常 下面是我对评论的适当部分所做的。 我可能已经尝试了15次迭代,但并不总是使用。第一次,但有时。单次 我没有访问存储库模式或任何NHibernate查询的权限。有没有办法用LINQ避免这种空引用异常?我不能延迟加载,所以这有点问题。

我使用的是NHibernate,它是通过职责和服务抽象出来的。我们不允许延迟加载属性,因此必须在查询中选择它们

我的问题是,我试图从Answers表中获取最新的响应号,但在许多情况下,该对象可能不存在,因此我只能获取Null引用异常,或者“代码应该是不可访问的”异常

下面是我对评论的适当部分所做的。

我可能已经尝试了15次迭代,但并不总是使用。第一次,但有时。单次


我没有访问存储库模式或任何NHibernate查询的权限。有没有办法用LINQ避免这种空引用异常?我不能延迟加载,所以这有点问题。

在EF/Linq-2-Sql中,这可以通过强制转换为可空值来实现,因为基础Sql执行空合并:

AssessmentResponse = (int?)followers.FollowerEmployee.Answers
    .First(a => a.Answer.Question.IsPrimary).Answer.Number
我不确定NHibernate会有什么样的行为,但值得一试。如果Number属性已可为空,则可以尝试合并它:

AssessmentResponse = (int?)followers.FollowerEmployee.Answers
    .First(a => a.Answer.Question.IsPrimary).Answer.Number ?? some default value
最后,您可以随时进行明确性检查:

AssessmentResponse = followers.FollowerEmployee.Answers.Any(a => a.Answer.Question.IsPrimary)
    ? followers.FollowerEmployee.Answers.First(a => a.Answer.Question.IsPrimary).Answer.Number ?? some default value
     : null
与此相反:

AssessmentResponse = followers.FollowerEmployee
                              .Answers
                              .First( a => a.Answer.Question.IsPrimary )
                              .Answer
                              .Number
                              //Null Reference Exception 
试试这个:

AssessmentResponse = followers.FollowerEmployee
                              .Where(a=>a.Answers != null && a.Answers
                                                              .Where(a=>a.Answer.Question.IsPrimary)
                                                              .Count > 0)
                              .Answers
                              .FirstOrDefault( a => a.Answer.Question.IsPrimary )
                              .Answer
                              .Number
                              //Null Reference Exception 

也许是FirstOrDefault?我试过FirstOrDefault,SingleOrDefault,Single,First,Take(1)。。。空引用异常或“代码应不可访问”。此处的缩进使其非常难以读取…空引用来自尝试获取应答的Number属性?在计数大于1的情况下,是否可以执行一次计算?哪个属性为您提供了
NullReferenceException
AssessmentResponse = followers.FollowerEmployee
                              .Where(a=>a.Answers != null && a.Answers
                                                              .Where(a=>a.Answer.Question.IsPrimary)
                                                              .Count > 0)
                              .Answers
                              .FirstOrDefault( a => a.Answer.Question.IsPrimary )
                              .Answer
                              .Number
                              //Null Reference Exception