【发布时间】:2020-01-07 08:15:04
【问题描述】:
我尝试运行此代码并弹出错误,具体转换无效。在添加任何 LINQ 之前做得很好。请帮忙谢谢。在添加任何 LINQ 之前仍然可以。但现在它无法加载用户数据库上下文。我不知道这是怎么发生的。请发送帮助谢谢。
ForumDBDataContext db = new ForumDBDataContext();
protected void Page_Load(object sender, EventArgs e)
{
ValidationSettings.UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
}
protected void btnLogin_Click(object sender, EventArgs e)
{
string emailAddress = txtEmail.Text;
string password = txtpwd.Text;
bool rememberMe = chkRememberMe.Checked;
User u = db.Users.SingleOrDefault(
x => x.EmailAddress == emailAddress &&
x.Hash == Security.GetHash(password)
);
if (u != null)
{
DateTime currentDate = DateTime.Now;
var query = from m in db.Members
where m.EmailAddress == emailAddress
select m.Last_Login_Date;
Convert.ToDateTime(currentDate);
DateTime lld = Convert.ToDateTime(query);
int diffDays = DateTime.Compare(currentDate, lld);
if (diffDays > 72)
{
Response.Redirect("ChangePwd.aspx");
}
else
{
Security.LoginUser(u.Name, u.Role, rememberMe);
}
}
【问题讨论】:
-
你不能在LINQ中使用
Security.GetHashmethod,因为这个方法不能被翻译成SQL。 -
这段代码是在 c# 中完成的,在此之前它可以运行。所以我不认为 Security.GetHash 是问题
-
@HowToGame 你的
db.Users是什么样的? -
创建视图 [dbo].[User] AS SELECT [Id],[EmailAddress],[Name],[Hash],[DateJoined], [Last_Login_Date],'Member' AS [Role] FROM [Member] UNION SELECT [Id],[EmailAddress],[Name],[Hash],[DateJoined],[Last_Login_Date],'Admin' AS [Role] FROM [Admin]
-
我创建了一个视图来结合成员和管理员