未知要在linq中返回到xml查询的数据类型

时间:2012-03-28 13:08:54

标签: c# list linq-to-xml xmldocument

我想返回从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 个答案:

答案 0 :(得分: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() ...

顺便说一下,(基于变量名称)不应该以明文存储密码。如果我错误地解释变量或你的例子是设计的,请道歉,但是如果有人发现这个帖子 - 应该存储密码(和唯一的盐)的哈希值而不是明文密码。

答案 1 :(得分:1)

我不会返回匿名类型,因为他们有这个问题。也许您应该创建一个新的数据结构,构造它,然后返回List<T>

答案 2 :(得分: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();
}