要在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 ????
会想到两种数据类型,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();
}