我有两个表公司和员工。关系是公司(一) - 员工(很多) 我想将所有Employees的名称连接到字符串和输出。 我知道我可以写这样的查询:
String names = "";
foreach(var emp in Company.Employee)
{
names += emp.name;
}
但如果我使用这个意思,我会将所有员工记录加载到内存中,然后进行比较,这会浪费时间和内存,并会降低性能。 所以在linq中,是否可以创建一个可以在单个SQL中返回所有连接名称的查询?
提前致谢!任何建议都将不胜感激!
答案 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);