加入两个系列

时间:2016-09-08 08:38:26

标签: c#

我的收藏集persons包含idname

Dictionary<int, string> persons;
  

1约翰
  2 Pitter
  3卡尔

然后我按组织收集人员ID

IDictionary<int, IEnumerable<int>> workers;
  

100 - [1,2]
  101 - []
  102 - [3]

最后我有一个只包含OrganizationId的主实体:

entity.OrganizationId = 100;

我需要通过workers并获取所有人(它将给出:1,2),以便最终从persons获取这些人的姓名。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

您可以使用子查询获取所需的ID,然后通过它来加入:

 select datepart(week,GETDATE()) // 37

No-Join方法:

var personsByOrganization =
        from p in persons
        join id in workers.Where(x => x.Key == entity.OrganizationId)
                          .SelectMany(x => x.Value)
        on p.Key equals id
        select p;

答案 1 :(得分:1)

无需LINQ获取ID:

IEnumerable<int> orgWorkers = null;
bool containsOrg = workers.TryGetValue(entity.OrganizationId, out orgWorkers);

现在获取名称很简单:

List<string> workerNames = new List<string>();
if(containsOrg)
{
    workerNames = orgWorkers
        .Where(id => persons.ContainsKey(id))
        .Select(id => persons[id])
        .ToList();
}

答案 2 :(得分:1)

如果您只想要来自此OrganisationId的人:

var personsFromOrganisation = workers[OrganizationId].Select(i => persons[i]);

如果您想要一个直接将所有OrganisationId与相应人员关联的对象(此处使用字典):

var organisationsIds = entities.Select(e => e.OrganisationId).Distinct();
var personsByOrganisation = organisationsIds.ToDictionary(id => id, id => workers[id].Select(pid => persons[pid]));