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

本文关键字:未知 数据类型 返回 linq-to-xml 查询 要在 | 更新日期: 2023-09-27 18:29:19

我想返回从Linq中的查询检索到的匿名数据。我不知道哪种列表<>返回,因为数据是"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 ????

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

会想到两种数据类型,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() ...

顺便说一句,(基于变量名)不应该以明文形式存储密码。如果我对变量的解释不正确,或者你的例子是人为的,我很抱歉,但如果有人无意中看到这篇文章,应该存储密码的哈希(和唯一的salt),而不是明文形式的密码。

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

您可以创建一个类型,例如:

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