2012-09-24 18 views
6

Ciao ragazzi! Ho una domanda riguardante un progetto su cui sto lavorando al momento. Ho questa riga di codice:Sessione ASP.NET e 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"; 
     } 
    } 

Nel mio "UsersTable" Ho un coulmn denominato "UserID". Voglio inviare "userID" come sessione alla pagina reindirizzata (Edit.aspx) l'ID utente deve essere uguale al risultato della comparazione tra nome utente e password.

Evviva :-)

+2

[Usa 'Any' invece di' Count'] (http://blogs.teamb.com/craigstuntz/2010/04/21/38598/) –

+0

È una cattiva pratica memorizzare le password degli utenti in testo in chiaro nel Banca dati. Dovresti prendere in considerazione l'hashing della loro password e archiviarla invece. –

risposta

6

si solo bisogno di scrivere

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"; 
} 

Non c'è bisogno di scrivere codice donw avete che utilizzano il metodo Conte al posto di questo solo fare uso di FirstOrDefault darà tu il risultato facilmente.

+0

Ranay Pranay, Funziona grazie mille per la risposta rapida e l'aiuto! Mi hai salvato un sacco di tempo – MishMish

+0

come faccio a farlo come risposta accettata? è la mia prima volta nel sito web:/ – MishMish

+0

perché c'è -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

Si noti che 'SingleOrDefault' non è supportato in' Linq-To-Entities' 3.5, quindi usare 'FirstOrDefault'. –

+0

grazie mille flem, ho provato sia la tua risposta che Paranay e funziona benissimo qui! Pollice in su :-) Cheers – MishMish