如何计算多个多对多表关系中不同项的数量?

时间:2012-12-13 16:31:45

标签: c# linq linq-to-sql

所以我有3个主表(数据并不重要):

  • 客户
  • 员工

还有几个“多对多”表加入其他3个表:

  • GroupCustomer
  • GroupEmployee

从本质上讲,客户可以属于许多组,员工可以属于许多组。

现在让我们说我已经询问了一位特定的客户。所以我有类似的东西:

Customer customer1 = GetCustomer1();

现在,我希望了解客户所在的任何群体中的不同员工......

int count = customer1.GroupCustomers.SomeLinqMagicGoesHere

那么,我需要的Linq魔法是什么?

重要:使用linq-to-sql

生成关系

一些理想的输入/输出,如果它有助于解释我的需求:

Customer
--------
C1
C2

GroupCustomer
--------
C1 | G1
C1 | G2
C2 | G1

Group
--------
G1
G2

GroupEmployee
--------
E1 | G1
E1 | G2
E2 | G2

Employee
--------
E1
E2

因此我想要C1的计数应该是2.而C2的计数应该是1.

希望不要再混淆这个问题了!

2 个答案:

答案 0 :(得分:1)

也许:

int count = costumer.GroupCustomers
    .SelectMany(gc => gc.Group.GroupEmployees)
    .Select(ge => ge.EmployeeID)
    .Distinct()
    .Count();

答案 1 :(得分:0)

如果您的映射是正确的,那么您应该能够获得客户所在组中不同员工的数量:

customer1.Groups.SelectMany(x => x.Employees).Distinct().Count()