Ich habe einen Entity Framework 5-Modell mit 4 Tabellen und ich brauche eine LINQ-Abfrage für sie zu schaffen. Ich bin nicht in der Lage, die DB-Struktur zu ändern, da dies eine 3rd-Party-DB ist.Linq auf Objekte mit Navigationseigenschaft kommen - wie die Leistung zu verbessern
Meine aktuelle Abfrage ist:
_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();
Die problematische Zeile ist:
IsProject = de.SiteType.Name != "opportunity"
Wie kann ich die Leistung dieser Abfrage verbessern?
Gibt es eine Möglichkeit, wie die de.SiteType.Name vorzuladen? Ich denke, dass das Problem wahrscheinlich durch die Tatsache verursacht wird, dass es eine Abfrage zu SiteType-Tabelle für jede de
Zeile erstellen muss, habe ich Recht?
Überprüfen Sie den Typ von IsProject und stellen Sie sicher, dass es auf Boolean gesetzt ist. – jdweng
IsProjects ist eine Eigenschaft der anonymen Objekte für den Vergleich und wie Sie sehen können - ja, es ist boolena –
Sie haben den Code, der die Definition für IsProject zeigt nicht veröffentlicht. Alles, was Sie gepostet haben, war der Code, in dem Sie versuchen, einen Booleschen Wert für IsProject festzulegen, und es schlägt fehl. Es ist nicht anonym, es ist in der Klasse ProjectSiteNode() definiert. – jdweng