次のLinqラムダ式があります:
private IEnumerable<SubjectSelectorSubjectGroup> GetSubjectList()
{
User user = db.Users.Find(WebSecurity.CurrentUserId);
return db.RequiredSubjects.Where(r => !r.Subject.Name.Contains("Home"))
.GroupBy(r => r.Subject)
.OrderByDescending(r => r.Count())
.Select(r => new SubjectSelectorSubjectGroup()
{
SubjectId = r.Key.SubjectId,
SubjectName = r.Key.Name,
IsInFavourites = HttpContext.Current.Request.IsAuthenticated &&
(user.Elective1 != null && user.Elective1.SubjectId == r.Key.SubjectId ||
user.Elective2 != null && user.Elective2.SubjectId == r.Key.SubjectId ||
user.Elective3 != null && user.Elective3.SubjectId == r.Key.SubjectId),
Occurrences = r.Count()
});
}
ユーザーがログインしていない場合user
、この関数の変数は null です。これは、短絡ブール値の評価で対処する必要があるため、問題にはなりません。問題は、そうではないということです。代わりに、 aSystem.NullReferenceException
がスローされます。
ユーザーが null の場合はHttpContext.Current.Request.IsAuthenticated
false を返します。user
変数を参照する括弧で囲まれたセクションをコメントアウトしてこれを確認したところ、式は正しく評価されました。
実際には必要ないのに、この状況で変数Linq to Sql
を逆参照しようとする理由を知っている人はいますか? user
この問題の回避策はありますか?