代码之家  ›  专栏  ›  技术社区  ›  Pedro Lopes

Linq在查询中解析时未被识别

  •  2
  • Pedro Lopes  · 技术社区  · 7 年前

    我正在尝试登录页面。当我试图用linq接收用户数据时,我会遇到一个异常,因为我试图在查询中使用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 回复  |  直到 7 年前
        1
  •  4
  •   Matthias Burger    7 年前

    你应该首先使用 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;
    
    }