0

我有这个返回非静态方法异常的 LINQ 查询,因为左连接有时会为 context.Betas 返回一个空值。

return (from t in context.Alphas
                join b in context.Betas on new { Id = t.Id } equals new { Id = b.AlphaId } into b_leftjoin
                from b in b_leftjoin.DefaultIfEmpty()
                where
                  t.UserProfileId == userProfileId
                  && t.IsClosed == false
                  && t.IsCancel == false
                  && t.EndDate <= DateTime.Now
                orderby
                  t.Title
                select new AlphaSelection()
                {
                    Title = t.Title,
                    CurrentUser = b.UserProfile == null ? null : b.UserProfile,
                    BetaId = b.Id == null ? 0 : b.Id,
                    ProjectNumber = t.ProjectNumber,
                    AlphaId = t.Id
                }).ToList();

如果我删除 CurrentUser 和 BetaId 查询有效,但我需要将所有信息放在一起。你能帮我解决这个问题吗?

谢谢!!


编辑(回复评论):

实际的例外是这个:

非静态方法需要一个目标。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

Exception Details: System.Reflection.TargetException: Non-static method requires a target.

Source Error:


Line 39:             else
Line 40:             {
Line 41:                 return query.ToList();
Line 42:             }
Line 43:         }
4

1 回答 1

5

你得到一个空引用异常。它被称为非静态目标异常,因为 LINQ 在后端使用反射来完成它的工作。

CurrentUser = b.UserProfile == null ? null : b.UserProfile,
BetaId = b.Id == null ? 0 : b.Id,

是导致它,你需要做

CurrentUser = b == null ? null : b.UserProfile,
BetaId = b == null ? 0 : b.Id,

由于引用类型的默认值为 null。

于 2013-06-05T15:46:32.810 回答