我的收藏集persons
包含id
和name
:
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
获取这些人的姓名。我怎么能这样做?
答案 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]));