2010-12-23 159 views
0

在关于如何很好地使用lambda表达式做一些建议之后。lambda表达式试图基于另一个查询一个列表

我想要的是获取基于代理机构的展示位置列表。我需要placement.agency!= agency的展示位置,但placement.agencypersonnel包含任何代理机构工作人员。

那么,植入广告不是该机构,但也有来自参与其他机构的布局

该机构我不知道基于第二条件如何查询人员。

因此,像:

// agency is being passed in 
    var agencySupervisors = agency.AgencyPersonnel; 

    return agency.Placements 
      .Where(p => p.Supervisors.Contains(agencySupervisors)) 
      .Where(p => p.Agency != agency); 

我得到一个包含应该指单个对象,而不是一个集合 - 这就是为什么它的示数..但我不知道如何得到它检查集合中的所有对象。

也尝试过任何

return agency.Placements 
      .Where(p => agencySupervisors.Any<PlacementSupervisor>(p.Supervisors)) 
      .Where(p => p.Agency != agency); 

所以希望它只是我用错了!

作品中的另一个扳手试图找出安置主管和机构人事实体如何相互关联..我认为它与AgencyPersonnelId = SupervisorId相关联,所以我猜这也必须考虑到我的表达。

谢谢!

编辑:如果两个列表中的对象类型不同 - 但我知道该ID将匹配时该如何处理。我是否必须编写一个比较器,并以某种方式将其纳入表达式?即。 AgencyPersonnelId = SupervisorId

我曾尝试:

return placements 
       .Where(p => p.Supervisors.Any(supervisor => agencySupervisors.Any(ap => ap.AgencyPersonnelId == supervisor.SupervisorId))); 

但它给我任何结果,因此显然是错误的。

编辑:实际上,当我尝试遍历返回的集合中的位置时,我得到一个空引用异常 - 所以我不确定它是否与我的表达式或我返回的方式有关结果。

+1

会agency.Placements不断含有不属于该agengy展示位置?如果没有,Suprvisors会提及他们所涉及的所有展示位置? – 2010-12-23 06:51:09

回答

0

感谢大家的帮助 - 因为对象是不同类型的,我最终不得不做一些不同的事情 - 但后来发现我能够使用他们的ID进行比较,所以结果如下:

var agencySupervisors = (from ap in agency.AgencyPersonnel 
            where ap != null 
             select ap.AgencyPersonnelId).ToList(); 

      return 
       (from p in m_PlacementRepository.Linq orderby p.PlacementId select p) 
       .Where(p => p.Agency != agency) 
       .Where(p => p.Supervisors != null && p.Supervisors.Any(s => agencySupervisors.Contains(s.SupervisorId))); 

加了Mikael作为正确地指出,我开始与错误的集合中的第一个地方:)

1

你是密切与Any & Contains - 一次

return agency.Placements   
    .Where(p => agencySupervisors.Any(supervisor => p.Supervisors.Contains(supervisor)) 
    .Where(p => p.Agency != agency); 
0

都试一下,我认为你可以用.Intersect也做到这一点:

return agency.Placements 
     .Where(p => agencySupervisors.Intersect(p.Supervisors).Any() 
        && p.Agency != agency); 
相关问题