Ich habe diesen Code:Kann ich in forEach eine Überprüfung auf Nulldetails einfügen?
foreach (var result in results)
{
if (result.definition != null)
{
WordForm wordForm = db.WordForms
.Where(w => w.Definition == result.definition)
.FirstOrDefault();
if (wordForm == null)
{
wordForm = addWordForm(result, word);
}
addWordFormExamples(result, word, wordForm);
addWordFormSynonyms(result, word, wordForm);
db.SaveChanges();
}
}
Gibt es eine Weise, die ich dieses ein .forEach und auch mit durch Zugabe in einer Kontrolle, wenn die Definition als Teil des eigentlichen .forEach null ist, zu sehen optimieren könnte? Ich möchte diesen Code aufräumen und so versuchen, was ich kann, um es weiter zu vereinfachen.
Bitte beachte, dass ich dies bereits zu einem privaten Methode bewegt:
private void processWordForm(Word word, Result result)
{
WordForm wordForm = db.WordForms
.Where(w => w.Definition == result.definition)
.FirstOrDefault();
if (wordForm == null)
{
wordForm = addWordForm(result, word);
}
addWordFormExamples(result, word, wordForm);
addWordFormSynonyms(result, word, wordForm);
db.SaveChanges();
}
So, jetzt brauche ich nur eine ordentliche Art und Weise, diese Methode zu nennen, wenn es einen Weg gibt.
Wenn zu fragen, den Code zu optimieren, ich glaube nicht, die Verwendung von Where-Methode, dies für Sie tun wird. Es selbst verwendet Schleife (n), um die Dinge herauszufiltern, die es nicht benötigt, was zu einer langsameren Ausführung dieses Codes im Vergleich zu dem Code in der Frage führt. Wo ist die Optimierung? – Adimeus
LINQ to Objects führt eine lineare Traversierung durch. LINQ to Entities übersetzt den Code in eine SQL WHERE.She hat db.SaveChanges() in ihrer Frage, also nehme ich an, dass sie LINQ zu Entities macht, also sollte meine Antwort eigentlich den Code optimieren. Aber selbst wenn es nicht klappt, sieht es immer noch besser aus Indem Sie den Null-Check entfernen und LINQ das für Sie behandeln lassen, sieht der Code viel lesbarer aus. –