【发布时间】:2014-02-11 09:53:27
【问题描述】:
我有 3 个 EF 实体:Appeal、AppealPerson、Person。
Appeal 和 Person 实体由 AppealPerson 实体连接(多对多关系)。
我想选择具有串联人员全名的申诉。
+----------+----------+--------------------------------------------------+
| AppealId | Appeal.* | Person.Surname + Person.Name + Person.MiddleName |
+----------+----------+--------------------------------------------------+
| 1 | ..info.. | Aaa Aaa Aaa, Bbb Bbb Bbb, Ccc Ccc Ccc |
+----------+----------+--------------------------------------------------+
| 2 | ..info.. | Aaa Aaa Aaa, Bbb Bbb Bbb |
+----------+----------+--------------------------------------------------+
现在我正在使用这个查询:
context.Appeals
.Select(a => new
{
Appeal = a,
Persons = a.AppealPersons
.Select(ap => ap.Person)
.Select(p => new { p.Surname, p.Name, p.MiddleName })
.ToList()
})
.AsEnumerable()
.Select(a => new
{
Id = a.Appeal.Id,
Persons = a.Persons.Select(p => string.Format("{0} {1} {2}", p.Surname, p.Name, p.MiddleName).Trim()),
})
.ToList<object>();
这个查询很慢。在 30 秒内生成约 500 行的列表。 请帮助优化查询。
【问题讨论】:
-
你检查过 sql - profiler 吗?它是生成一个 sql 查询还是为每个上诉做一个查询?
标签: c# sql-server linq entity-framework