0

有 n 家公司 有 m 名员工 一名员工可以在多家公司工作

我给你一份公司名单 {c1,c2,...} 给我所有为这家公司工作的员工,他们的名字是 Bob。

context.EmployeeSet.Where(e => e.Companies.Intersect(_companiesParam)!=null).Where(emp=>emp.Name=="Bob").ToList();

搜索所有名为 Bob 的员工会非常慢,因为每家公司的平均员工人数少于 10 人,所以我首先按公司归档。

我关心的是我应该如何编写 .Where(e => e.Companies.Intersect(_companiesParam)!=null) 更有效。是否可以避免相交运算符?

4

1 回答 1

0

如果你想避免相交,你总是可以用 Any 和 Contains 编写它。

context.EmployeeSet.Where(e => e.Companies.Any(c => _companiesParam.Contains(c)) && e.Name == "Bob").ToList();
于 2013-02-20T15:08:50.397 回答