C#LINQ可以为空。内联空值检查

时间:2012-05-24 22:14:56

标签: c# linq

我正在尝试执行以下操作

List<JobPhase> jobPhases = new JobPhaseDao().findAll();
jobPhases.Remove(jobPhases.Where(m => m.Name.Contains("Pre")).First());

这里有一个优雅的方法来进行内联空值检查,这样如果列表找到任何匹配项,我可以删除任何内容吗?

由于

2 个答案:

答案 0 :(得分:2)

List.Remove似乎已经支持此行为:传递null作为参数,它应该不会删除任何内容。

要避免在.Where调用未返回任何匹配项时出现异常,请使用FirstOrDefault()代替First()

请注意,如果您只希望一个项目与Where谓词匹配,则应使用SingleOrDefault而不是First

那就是说,你要做的事情并不完全清楚:如果你的名字中有多个包含“Pre”的JobPhases,你有点随意从列表中删除其中一个。您是否尝试删除所有匹配的JobPhases?如果是这样,您应该探索不同的方法,例如使用RemoveAll()。例如:

List<JobPhase> jobPhases = new JobPhaseDao().findAll();
jobPhases.RemoveAll(jobPhases.Where(m => m.Name.Contains("Pre")));

答案 1 :(得分:0)

List<JobPhase> jobPhases = new JobPhaseDao().findAll()
    .Where(m => !m.Name.Contains("Pre"));