2014-04-18 55 views
4

我想执行下面的代码。我的目标是检查是否存在具有给定电子邮件ID的用户。实体框架:'SqlParameter已经包含另一个SqlParameterCollection'

var result = userDbContext.users.SqlQuery("SELECT * FROM USERS WHERE @email='@emailValue'", 
new SqlParameter("@email", "email"), 
new SqlParameter("@emailValue","[email protected]")); 
//new SqlParameter("p1", existingUser.password)); 

if (result.Count() == 0) //getting exception here 
{ 
    ViewBag.comment = "Sorry. We can not find your credentials"; 
    return View(); 
} 

但我在result.count()越来越异常,不知道什么错误。

的例外是:

我该如何解决这个 “SqlParameter有已被另一 SqlParameterCollection载”?

+4

你不能参数你的列名,你可以参数你的值。 –

回答

0

你可以试试这个

var check = (from item in userDbContext.users where item.email == email select item).FirstOrDefault(); 
if (check == null) 
{ 
    ViewBag.comment = "Sorry. We can not find your credentials"; 
    return View(); 
} 
2

做这样的事情:

SqlParameter parameter = new SqlParameter("email", SqlDbType.VarChar); 
parameter.Value = "[email protected]"; 

或尝试这样的:

var check =userDbContext.Database 
      .SqlQuery<user>("SELECT * FROM USERS 
          WHERE [email protected]", 
          new SqlParameter("@emailValue","[email protected]")).ToList(); 

的SqlParameter是这样的:

var p = new SqlParameter { 
    ParameterName = "paramName", 
    DbType = DbType.Bit, 
    Direction = ParameterDirection.Output 
}; 
0

当您通过查询使用参数时,不能通过其他查询使用它们。在你的代码使用的是他们的两倍

1- userDbContext.users.SqlQuery.... 
2- result.Count(). 

,但如果您使用此代码:

"userDbContext.users.SqlQuery(...).Count()" 

您的代码将是正确的

**类SqlQuery不直到您使用返回的查询结果(),tolist()......另一方面,当你使用SqlQuery时,当你使用any(),tolist(),first()时,结果是一个IEnumerable它被转换为结果

+0

@Theresa:谢谢你,theresa。但你能告诉我为什么我的答案得到了否定的答复。 – amin

相关问题