我有这段代码:
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();
}
}
有没有办法可以使用.forEach优化它,还可以添加一个检查来查看定义是否为实际.forEach的一部分?我想清理这些代码,并尽我所能进一步简化它。
请注意,我已将其移至私有方法:
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();
}
所以现在我只需要一种更整洁的方法来调用这种方法,如果有办法的话。
答案 0 :(得分:3)
您在执行foreach
循环之前获得了所有结果,并在循环内部检查每一个是否包含非null的定义。这意味着您实际上只对包含定义的结果感兴趣。
您可以通过修改将results
对象设置为仅包含带定义的结果的查询来略微重新考虑您的代码。这样就无需在{null
内进行foreach
检查1}}循环。
这样的事情:
var results = sourceOfData.Where(i => e.definition != null).ToList();
foreach (var result in results)
{
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();
}