2013-10-16 105 views
0

您好,感謝您抽出時間! 我有兩個列表,我想放在一起。在我的情況下無法看到這是如何可能的。想法?在列表中添加一個清單

這是我的代碼看起來像:

Random rnd = new Random(); 
       userList = userList.OrderBy(user => -user.ID).Take(userCount).ToList(); 
       userList = userList.OrderBy(user => -user.ID).Take(userCountRandom).ToList(); 

正如你可以看到我想要把用戶列表的用戶列表,所以我可以在列表中執行兩個功能。 整個概念是,我想列出我的用戶列表中的用戶,其中一些應該從數據庫中隨機排列,一些應該是前10位註冊。並且第一個添加的列表是最新註冊的列表,另一個列表將洗牌用戶。

+0

我覺得** [是](http://stackoverflow.com/questions/2206160/how-to-create-a -list-inside-the-another-list)**你在找什麼 – user2771704

+1

你可以編寫'OrderByDescending(user => user.ID)'並獲得相同的結果,同時代碼更加清晰。 –

+0

感謝提示@TimS。 :) – user2862542

回答

4

如果你想要連接兩個列表,可以使用linq的Concat擴展方法。如果你不想重複(可能發生在你的例子中),你可能想使用Union

在你的榜樣,因爲名單是由-user.ID有序的,因此這兩個列表的工會將等於兩者的更大的將是足以採取的userCountuserCountRandom最大。

考慮到你的previous question,我想你想的東西像

userList = userList.OrderBy(user => -user.ID) 
        .Take(userCount) 
        .Union(userList.OrderBy(user => rnd.Next()) 
            .Take(userCountRandom)) 
        .ToList(); 
+1

雖然這將工作,有更好的方法來洗牌清單,或從列表中選擇幾個隨機元素 –

+0

@ TimS。當我選擇這個答案的時候,我已經把第一個問題聯繫起來了,只是想給出一個鏈接到op的具體問題/情況。 – Matten

+1

Thanks!Works perfect !! – user2862542

0

只需Concat的一個清單,其他:

Random rnd = new Random(); 
var firstUserList = userList.OrderBy(user => -user.ID).Take(userCount).ToList(); 
var secondUserList = userList.OrderBy(user => -user.ID).Take(userCountRandom).ToList(); 

var mergedUserList = firstUserList.Concat(secondUserList); 
+0

因爲你可以看到它的列表:(很難使用firstlist和secondlist .. – user2862542

2

您可以使用Concat

userList = userList 
    .OrderBy(user => -user.ID) 
    .Take(userCount) 
    .Concat(
userList 
    .OrderBy(user => -user.ID) 
    .Take(userCountRandom) 
).ToList(); 

或者,如果你不想重複使用聯盟:

userList = userList 
     .OrderBy(user => -user.ID) 
     .Take(userCount) 
     .Union(
    userList 
     .OrderBy(user => -user.ID) 
     .Take(userCountRandom) 
    ).ToList();