我正在尝试创建一个登录页面。当我尝试使用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();
}
我查了这些文章:
答案 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;
}
当然,有更好/更清洁的方法,但这只是为了解释你。