2012-03-28 3 views
2

Я хочу вернуть анонимные данные, полученные из запроса в Linq. Я не знаю, какой вид List <> return, потому что данные «var» анонимны.Неизвестный Тип данных для возврата в linq в xml-запрос

  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

Просто сторона идеи, глядя на имена переменных, не хранить пароли, не так ли? – oleksii

+0

Я делаю, но файл, который contais XDocument зашифрован – kmxillo

+1

, тогда это не самая лучшая идея в безопасности, на самом деле не имеет значения, шифруете ли вы файл или даже шифруете каждый пароль или и то, и другое. Это значительно большой вектор для атаки, где хакер получает ваш ключ шифрования и расшифровывает файл/пароли. Более безопасный подход заключается в сохранении генерируемого сильного хэша пароля. Таким образом, вы вообще не храните пароли, а только необратимый «мусор». Каждый пользователь регистрируется, вы повторно применяете хеш к предоставленному паролю и сравниваете его с сохраненным хэшем. Но это зависит от того, насколько вы заботитесь о безопасности этого приложения. – oleksii

ответ

3

два типа данных приходят к разуму, Tuple<string, string> или KeyValuePair<string, string> в зависимости от их предполагаемого использования:

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(); 
} 

Используя эти, однако, часто может скрыть смысл возвращаемых типов. Поскольку метод является открытым, вы можете быть лучше создать новый класс для работы:

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

public List<UserCredentials> QueryXmlUserLogin() ... 

Как и в стороне (на основе имен переменных), хранящие пароли в незашифрованном виде не должны быть сделаны. Извиняюсь, если я неправильно интерпретирую переменные, или ваш пример надуман, но если кто-то наткнется на это сообщение - хэш пароля (и уникальная соль) должен храниться, а не пароль в виде открытого текста.

+0

Спасибо, это решает мою проблему. – kmxillo

1

Я бы не возвращал анонимные типы, поскольку у них есть эта проблема. Возможно, вам следует создать новую структуру данных, построить ее, а затем вернуть List<T>.

1

Вы можете создать тип, например:

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

Затем используйте:

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(); 
} 
Смежные вопросы