У меня есть модель Entity Framework 5 с 4 таблицами, и мне нужно создать запрос LINQ против них. Я не могу изменить структуру БД, поскольку это сторонний БД.Linq присоединиться к объектам с навигационным свойством - как повысить производительность
Мой текущий запрос:
_projectSites = (from de in _data.DataExchange
join m in _data.Projects_MACO //combine exchange data and maco data
on new
{
Number = de.number,
IsProject = de.SiteType.Name != "opportunity"
} equals
new
{
Number = m.ProjectNumber == null ? m.OppNumber : m.ProjectNumber,
IsProject = m.ProjectNumber != null
}
join d in _data.DataStores //and select only sites with datastores
on new
{
Number = de.number
} equals
new
{
Number = d.SiteNumber
}
where de.Server.Name == _server
select new ProjectSiteNode()
{
Server = de.Server.Name,
ProjectNumber = de.number,
Manager = m.ProjectNumber == null ? m.OMInitials : m.PMInitials,
Exists = true,
IsConfidential = de.confidential,
Name = m.ProjectNumber == null ? m.OppTitle : m.ProjectTitle,
ProjectType = de.SiteType.Name,// m.ProjectNumber == null ? "opportunity" : "project",
Status = de.SiteState.Name
}).Distinct().ToList();
Проблематика линия:
IsProject = de.SiteType.Name != "opportunity"
Как я могу улучшить производительность этого запроса?
Есть ли какой-нибудь шанс предварительно загрузить файл de.SiteType.Name? Я думаю, что проблема, вероятно, связана с тем, что он должен создать запрос к таблице SiteType для каждой строки de
, правильно?
Проверьте тип IsProject и убедитесь, что он установлен на Boolean. – jdweng
IsProjects является свойством анонимных объектов, используемых для сравнения, и, как вы можете, да, это boolena –
Вы не разместили код, который показывает определение для IsProject. Все, что вы разместили, это код, в котором вы пытаетесь установить логическое значение в IsProject, и он не работает. Он не является анонимным, он определен в классе ProjectSiteNode(). – jdweng