如何编写这个linq查询以避免太多查询?

时间:2010-08-06 10:25:52

标签: linq linq-to-sql linq-to-entities aggregate

我有两个表公司和员工。关系是公司(一) - 员工(很多) 我想将所有Employees的名称连接到字符串和输出。 我知道我可以写这样的查询:

  String names = "";
    foreach(var emp in Company.Employee)
    {
         names += emp.name;
    }

但如果我使用这个意思,我会将所有员工记录加载到内存中,然后进行比较,这会浪费时间和内存,并会降低性能。 所以在linq中,是否可以创建一个可以在单个SQL中返回所有连接名称的查询?

提前致谢!任何建议都将不胜感激!

2 个答案:

答案 0 :(得分:2)

var employeeNames = context
                       .Company
                       .Where(c => c.Id = 0xF00)
                       .SelectMany(c => c.Employee)
                       .Select(e => e.Name)
                       .ToArray();

var result = String.Join(" ", employeeNames);

根据确切的语义和Entity Framework版本,您可以改变选择公司的查询部分。在.NET 4.0中,实体框架支持Single()。如果您不关心轻微的语义差异,可以在.NET 4.0之前使用First()而不是SelectMany()

答案 1 :(得分:0)

这是丹尼尔的简化版本,但我认为它应该有效(对模式做出假设)

var employeeNames = (from e in context.Employee
                       where e.CompanyId = 0xF00
                       select e.Name)
                       .ToArray(); 

var result = String.Join(" ", employeeNames);