首页 > 解决方案 > 我应该如何使用收藏?

问题描述

我有一个字符串列表,由数据库(实体框架)的查询填充:

 var accountIds = new List<string>();

现在我想将两个字符串列表添加到我的集合中,例如,我有以下两个查询:

 using (var myketDB = new MyketReadOnlyDb())
            {
                if (!string.IsNullOrWhiteSpace(name))
                {
                    accountIds = myketDB.AppDevelopers
                        .Where(n => n.RealName.Contains(name))
                        .Select(e => e.Email).ToList();                  
                }                
                if (!string.IsNullOrWhiteSpace(email))
                {
                    accountIds = myketDB.Accounts
                      .Where(e => e.Mail.Contains(email))
                      .Select(e => e.Email).ToList();
                }                 
            }

因此,通过此查询accountIds更改,我不希望发生这种情况。我想在 accountIds 中有两个列表。像这样的东西:

accountIds.add(//first query);
accountIds.add(//2nd query);

类似工会的东西(我不想使用工会)。我是收藏列表的新手。非常感谢。

标签: c#asp.net-mvclistentity-frameworkicollection

解决方案


如果您想将多个项目添加到现有列表中,那么.AddRange方法将为您执行此操作

accountIds.AddRange(myketDB.AppDevelopers
                        .Where(n => n.RealName.Contains(name))
                        .Select(e => e.Email).ToList());

accountIds.AddRange(myketDB.Accounts
                      .Where(e => e.Mail.Contains(email))
                      .Select(e => e.Email).ToList());

或者更简单地说,首先将查询结果收集到变量中,然后将这些结果添加到现有列表中,例如,

var appDevEmails = myketDB.AppDevelopers
                            .Where(n => n.RealName.Contains(name))
                            .Select(e => e.Email).ToList();

var accountsEmails = myketDB.Accounts
                          .Where(e => e.Mail.Contains(email))
                          .Select(e => e.Email).ToList();

accountIds.AddRange(appDevEmails);

accountIds.AddRange(accountsEmails);

延伸阅读:

List.AddRange(IEnumerable) 方法


推荐阅读