2012-09-24 16 views
6

Hola chicos! Tengo una pregunta sobre un proyecto en el que estoy trabajando en este momento. que tienen esta línea de código:ASP.NET Session y LINQ

var query = from user in dwe.UsersTable 
         where user.LoginName.Equals(usernameBox.Text) && user.Password.Equals(pwBox.Text) 
         select user; 

     if (query.Count() == 1) 
     { 
      Session["User"] = usernameBox.Text;      
      Response.Redirect("Edit.aspx"); 
     } 
     else 
     { 
      LabelError.Text = "Error try again"; 
     } 
    } 

En mi "UsersTable" Tengo un coulmn llamado "ID de usuario". Quiero enviar el "ID de usuario" como una sesión a la página redirigida (Edit.aspx) el ID de usuario debe ser igual al resultado de la comparación entre Nombre de usuario y contraseña.

Saludos :-)

+2

[Usar 'Any' en lugar de' Count'] (http://blogs.teamb.com/craigstuntz/2010/04/21/38598/) –

+0

Es una mala práctica almacenar las contraseñas de los usuarios en texto plano en el base de datos. Debería considerar hash su contraseña y almacenarla en su lugar. –

Respuesta

6

sólo tiene que escribir

var query = (from user in dwe.UsersTable 
         where user.LoginName.Equals(usernameBox.Text) && 
         user.Password.Equals(pwBox.Text) 
         select user).FirstOrDefault(); 

if(query!=null) 
{ 
    Session["User"] = query.UserID; 
    Response.Redirect("Edit.aspx"); 
} 
else 
{ 
    LabelError.Text = "Error try again"; 
} 

No hay necesidad de escribir código que tiene donw que utilizan método Count en lugar de esto simplemente hacer uso de FirstOrDefault dará usted el resultado fácilmente

+0

Pranay Rana, ¡funciona gracias por la respuesta rápida y ayuda! Me salvaste un montón de tiempo – MishMish

+0

¿Cómo lo hago como respuesta aceptada? es mi primera vez en el sitio web:/ – MishMish

+0

¿por qué hay -1? –

3
var query = from user in dwe.UsersTable 
      where user.LoginName.Equals(usernameBox.Text) 
        && user.Password.Equals(pwBox.Text) 
      select user; 

// get user from query 
// If SingleOrDefault is not supported (<4.0) use FirstOrDefault instead. 
// Thanks Tim Schmelter 
var user = query.SingleOrDefault(); 

if (user != null) 
{ 
    Session["UserID"] = user.UserID;     
    Response.Redirect("Edit.aspx"); 
} 
else 
{ 
    LabelError.Text = "Error try again"; 
} 
+0

Tenga en cuenta que 'SingleOrDefault' no se admite en' Linq-To-Entities' 3.5, luego use 'FirstOrDefault'. –

+0

muchas gracias flem, ¡intenté tanto tu respuesta como la de Paranay y funciona bien aquí! pulgares arriba :-) Cheers – MishMish