这是我在MVC4模型中的IsValid用户登录代码。
我正在尝试将我的SQL命令转换为LINQ。
如何将其转换为LINQ方式?
public bool IsValid(string _username, string _password)
{
using (var cn = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename" +
@"='C:\Tutorials\1 - Creating a custom user login form\Creating " +
@"a custom user login form\App_Data\Database1.mdf';Integrated Security=True"))
{
string _sql = @"SELECT [Username] FROM [dbo].[System_Users] " +
@"WHERE [Username] = @u AND [Password] = @p";
var cmd = new SqlCommand(_sql, cn);
cmd.Parameters
.Add(new SqlParameter("@u", SqlDbType.NVarChar))
.Value = _username;
cmd.Parameters
.Add(new SqlParameter("@p", SqlDbType.NVarChar))
.Value = Helpers.SHA1.Encode(_password);
cn.Open();
var reader = cmd.ExecuteReader();
if (reader.HasRows)
{
reader.Dispose();
cmd.Dispose();
return true;
}
else
{
reader.Dispose();
cmd.Dispose();
return false;
}
}
}
答案 0 :(得分:0)
我首先考虑使用实体框架(http://msdn.microsoft.com/en-gb/data/ef.aspx)中的实体数据模型来模拟C#中的数据库对象,并将其添加到项目中。
然后我将在您的数据库中创建一个存储过程来处理SQL语句的执行,并传入您要测试的参数。
然后,我将存储过程导入数据模型并对其运行LINQ查询。
有些事情:
var valid = (from users in context.CheckUserMembership(userName: userName, password: password)
select new User
{
UserId = users.UserId,
UserName = users.Username
}).Count() > 0;
其中context是对Entity Data Model向导生成的数据上下文的引用,CheckUserMembership是包含SQL语句的导入存储过程。
答案 1 :(得分:0)
在为应用程序进行LINQ或任何ORM设置之后,可以将其转换为简单的LINQ语句。
return _dbContext.Users.Any(c=>c.UserName == _username && c.Password == Helpers.SHA1.Encode(_password));