在linq where语句中使用cookie值

时间:2012-09-02 15:06:09

标签: c# .net linq cookies

我有一个linq WHERE语句,我想要使用cookie值字符串(aspxauth)来匹配表中的字符串,但是我得到一个“对象引用未设置为对象的实例“。错误。

代码是:

        HttpCookie authCookie = Request.Cookies[".aspxauth"];
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
        string cookieUser = authCookie.Value;

        if (User.Identity.IsAuthenticated)
        {
            if (Request.Cookies[".aspxauth"] != null)
            {
                var loginStatus = new UsersDataContext();
                var loginstatus = from s in loginStatus.sessions
                                  where s.aspxauth == cookieUser
                                  select s;

                var x = loginstatus.FirstOrDefault().UserId.ToString();

如果我删除where语句,我不会收到错误。

关于我在哪里出错的任何想法?

感谢任何帮助,谢谢。

3 个答案:

答案 0 :(得分:0)

它告诉您至少有一个会话项为null,或者您的where语句将集合过滤为零项。

答案 1 :(得分:0)

如果没有元素匹配,您将收到此错误,即where s.aspxauth == cookieUser中每个元素的loginStatus.sessions为false。 FirstOrDefault()将返回对象的默认值,该值为null。

答案 2 :(得分:0)

我的猜测是loginStatus.sessions序列中的所有元素都不匹配where子句的条件,导致loginstatus.FirstOrDefault()返回null,所以当你尝试访问.UserId时,你得到空引用异常。

您应该自己检查null并处理案例:

var firstLoginStatusMatch = loginstatus.FirstOrDefault();

if (firstLoginStatusMatch  == null)
{
   // Handle no match
}

var userId = firstLoginStatusMatch.UserId.ToString()

我还建议将变量命名为更具描述性。你有两个同名但外壳不同的变量,这使得代码很难扫描。