我可以在中途“停止”LINQ方法链吗?

时间:2018-05-16 10:20:58

标签: c# linq ienumerable

我的代码中有以下方法链:

MyFormCollection
    .Select(form => Handler.HandleForm(form))
    .Select(form =>
    {
        form.Id = Guid.Empty;
        form.OtherProperty = existingValue;
        return form;
    })
    .ToList()
    .ForEach(FormService.SaveForm);

此代码的问题是Handler.HandleForm()在某些情况下可以返回null。如果是这种情况,我想跳过该表单的其余方法,然后继续列表中的下一个项目。

有没有办法在不执行每一步的空检查的情况下执行此操作?

2 个答案:

答案 0 :(得分:9)

我建议添加Where

MyFormCollection
    .Select(form => Handler.HandleForm(form))
    .Where(form => form != null) // <- from this line on not null form(s) only
    ...

答案 1 :(得分:0)

其他方法是通过将所有内容添加到.ForEach:

来简化查询
MyFormCollection.ToList()
    .ForEach(form => {
        if((form = Handler.HandleForm(form)) != null)
        {
           form.Id = Guid.Empty;
           form.OtherProperty = existingValue;
           FormService.SaveForm(f))
        }
     }