2012-03-28 84 views
2

我想返回從Linq中的查詢中獲取的匿名數據。我不知道哪種列表<>返回,因爲數據是「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 2012-03-28 13:14:35

+0

我的確如此,但contais XDocument加密的文件 – kmxillo 2012-03-28 13:26:33

+1

那麼它的安全性並不是最好的想法,如果你加密一個文件甚至加密每個密碼或兩者並不重要。它是一個相當大的攻擊載體,黑客可以獲得加密密鑰並解密文件/密碼。更安全的方法是存儲生成的強密碼密碼。因此你根本不存儲密碼,只有一個不可逆的「垃圾」。每次用戶登錄時,都會重新應用散列提供的密碼並將其與存儲的散列進行比較。但是,如果您關心該應用程序的安全性,則這種情況取決於您。 – oleksii 2012-03-28 13:44:18

回答

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 2012-03-28 13:22:59

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