linq中多个对象的哈希表键

时间:2013-01-17 11:20:54

标签: c# linq

哈希表minhash = new Hashtable();

        testdata td = new testdata() { value = "td" };
        td.hash.Add("1", "tdvalue1");
        td.hash.Add("2", "tdvalue2");
        td.hash.Add("3", "tdvalue3");
        td.hash.Add("4", "tdvalue4");
        td.hash.Add("5", "tdvalue5");

        testdata td1 = new testdata() { value = "td1" };
        td1.hash.Add("1", "td1value1");
        td1.hash.Add("2", "td1value2");
        td1.hash.Add("3", "td1value3");
        td1.hash.Add("4", "td1value4");
        td1.hash.Add("5", "td1value5");

        testdata td2 = new testdata() { value = "td2" };
        td2.hash.Add("1", "td2value1");
        td2.hash.Add("2", "td2value2");
        td2.hash.Add("3", "td2value3");
        td2.hash.Add("4", "td2value4");
        td2.hash.Add("5", "td2value5");

        testdata td3 = new testdata() { value = "td3" };
        td3.hash.Add("1", "td3value1");
        td3.hash.Add("2", "td3value2");
        td3.hash.Add("3", "td3value3");
        td3.hash.Add("4", "td3value4");
        td3.hash.Add("5", "td3value5");

        testdata td4 = new testdata() { value = "td4" };
        td4.hash.Add("1", "td4value1");
        td4.hash.Add("2", "td4value2");
        td4.hash.Add("3", "td4value3");
        td4.hash.Add("4", "td4value4");
        td4.hash.Add("5", "td4value5");

        mainhash.Add(1, td);
        mainhash.Add(2, td1);
        mainhash.Add(3, td2);
        mainhash.Add(4, td3);
        mainhash.Add(5, td4);

如何使用Linq的SelectMany选择所有键到一个列表?我需要做什么?

var values = mainhash.Values.Cast<testdata>().Select(x => x.hash)
                                             .SelectMany(x=> x.Keys);

这有什么问题?

2 个答案:

答案 0 :(得分:2)

它不知道Hashtable.Keys中使用的类型。

尝试:

var values = mainhash.Values.Cast<testdata>().Select(x => x.hash)
                           .SelectMany(x => x.Keys.Cast<string>());

但更好:使用Dictionary<TKey,TValue>代替Hashtable

答案 1 :(得分:0)

尝试以下查询 -

var values = mainhash.Values.Cast<testdata>().SelectMany(x => x.hash.Keys.Cast<string>());

但是,使用字典而不是哈希表。它实际上减少了投射对象的开销。

希望以上代码可以帮助你!!