我可以在forEach中包含对null详细信息的检查吗?

时间:2016-06-05 06:49:58

标签: c# asp.net asp.net-web-api

我有这段代码:

         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();
    }

所以现在我只需要一种更整洁的方法来调用这种方法,如果有办法的话。

1 个答案:

答案 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();
}