2013-10-16 63 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();