Неизвестный тип данных для возврата в запросе linq to xml - PullRequest
2 голосов
/ 28 марта 2012

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

          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 ????

Ответы [ 3 ]

3 голосов
/ 28 марта 2012

На ум приходят два типа данных: 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() ...

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

1 голос
/ 28 марта 2012

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

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();
}
1 голос
/ 28 марта 2012

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

...