Linq在查询中没有被识别解析

时间:2017-08-16 11:59:21

标签: asp.net asp.net-mvc entity-framework linq

我正在尝试创建一个登录页面。当我尝试使用linq接收userdata时,我得到一个异常,因为我尝试在查询中使用Parse。我在网上搜索了一下,发现这是因为Linq不认识Parse。据我所知,我必须将无法识别的代码翻译成linq / slq识别的代码。由于我刚开始使用linq查询,我不知道如何实现这一点。

我的查询:

    public static UserDetails GetUser(UserDetails userde)
    {
        var usr = from u in db.Users
                  join r in db.Roles on u.RoleId equals r.IdRole
                  where u.Email == userde.Email && u.Active == true

                  select new UserDetails 
                             { Firstname = u.Firstname,
                               Surname = u.Surname,
                               Email = u.Email,
                               Function = u.Function,
                               Password = u.Password,
                               Salt = u.Salt,
                               Userroles = (UserRoles)Enum.Parse(typeof(UserRoles), r.Role1) 
                             };

        return usr.FirstOrDefault();
    }

我查了这些文章:

1 个答案:

答案 0 :(得分:4)

您应该先使用FirstOrDefault()并稍后解析。否则linq仍在尝试构建select语句。在FirstOrDefault(或ToList,...)之后,您获得了结果,然后可以毫无问题地解析它。

应该是这样的:

public static UserDetails GetUser(UserDetails userde)
{
    var usr = from u in db.Users
              join r in db.Roles on u.RoleId equals r.IdRole
              where u.Email == userde.Email && u.Active == true

              select new UserDetails { Firstname = u.Firstname,
                  Surname = u.Surname,
                  Email = u.Email,
                  Function = u.Function,
                  Password = u.Password,
                  Salt = u.Salt,

                  // store the database-value in another property
                  UserrolesUnparsed = r.Role1
                  };

    // get the database-results
    UserDetails details = usr.FirstOrDefault();

    // parse the database-value and set it to the property you want to
    details.Userroles = (UserRoles)Enum.Parse(typeof(UserRoles), details.UserrolesUnparsed);

    return details;

}

当然,有更好/更清洁的方法,但这只是为了解释你。