2012-03-28 3 views
2

Ich möchte eine anonyme Abfrage zurückgeben, die von einer Abfrage in Linq zurückgegeben wird. Ich weiß nicht, welche Art von Liste < zurückgeben, weil die Daten "var" anonym sind.Unbekannter Typ der Daten, die in linq an XML-Abfrage zurückgegeben werden

  public List<?????> QueryXmlUserLogin() 
     { 
      var data = from item in XDocumentObj.Descendants("User_Data") 
        select new 
        { 
         user = item.Element("user").Value, 
         password = item.Element("password").Value, 
        }; 

     data.ToList(); 

     return ???? 
+1

Nur eine Seite Idee, an den Variablennamen suchen, Sie Passwörter nicht speichern, nicht wahr? – oleksii

+0

Ich mache aber die Datei, die XDocument enthält, ist verschlüsselt – kmxillo

+1

gut dann ist es nicht wirklich die beste Idee securitywise, es ist nicht wirklich wichtig, wenn Sie eine Datei verschlüsseln oder sogar jedes Passwort oder beides verschlüsseln. Es ist ein ziemlich großer Vektor für einen Angriff, bei dem ein Hacker Ihren Verschlüsselungsschlüssel erhält und die Datei/Passwörter entschlüsselt. Ein sicherer Ansatz besteht darin, einen generierten starken Hash eines Passworts zu speichern. Sie speichern also keine Passwörter, nur einen unumkehrbaren "Müll". Jedes Mal, wenn sich ein Benutzer anmeldet, wenden Sie den Hash erneut auf das angegebene Passwort an und vergleichen es mit dem gespeicherten Hashwert. Aber das hängt davon ab, ob Sie sich um die Sicherheit dieser Anwendung kümmern. – oleksii

Antwort

3

Zwei Datentypen in den Sinn kommen, eine Tuple<string, string> oder ein KeyValuePair<string, string> je nach ihrer beabsichtigten Nutzung:

public List<Tuple<string, string>> QueryXmlUserLogin() 
{ 
    var data = from item in XDocumentObj.Descendants("User_Data") 
       select Tuple.Create(item.Element("user").Value, item.Element("password").Value); 

    return data.ToList(); 
} 

diese jedoch verwenden, können oft verstecken die Bedeutung der Rückgabetypen. Da das Verfahren öffentlich ist, können Sie besser sein, eine neue Klasse für den Job zu schaffen:

public class UserCredentials 
{ 
    public string Username {get; set; } 
    public string Password {get; set; } 
} 

public List<UserCredentials> QueryXmlUserLogin() ... 

Als beiseite, (basierend auf den Variablennamen) Speicherung von Passwörtern im Klartext sollten nicht durchgeführt werden. Entschuldigung, wenn ich die Variablen falsch interpretiere oder Ihr Beispiel erfunden ist, aber wenn jemand über diesen Beitrag stolpert - sollte ein Hash des Passworts (und des eindeutigen Salzes) anstatt des Passwortes im Klartext gespeichert werden.

+0

Danke, es löst mein Problem. – kmxillo

1

Ich würde anonyme Typen nicht zurückgeben, da sie dieses Problem haben. Vielleicht sollten Sie eine neue Datenstruktur erstellen, sie konstruieren und dann eine List<T> davon zurückgeben.

1

Sie könnten eine Art erstellen, zum Beispiel:

class Person { 
    public string User { get; set; } 
    public string Password { get; set; } 
} 

Dann nutzen:

public List<Person> QueryXmlUserLogin() 
{ 
    var data = from item in XDocumentObj.Descendants("User_Data") 
     select new Person 
     { 
       User = item.Element("user").Value, 
       Password = item.Element("password").Value, 
     }; 

    return data.ToList(); 
} 
Verwandte Themen