处理传递到控制器的模型中的Null

时间:2013-12-13 20:12:19

标签: c# asp.net-mvc linq lambda

我正在尝试修复这些linq语句,以便在模型为null时它们不会出错。

例如: model.FilterSet.Dispositions可能为null。虽然model.FilterSet.GenderFilters可能不会。

如果存在null,我当前的linq语句会出错,因此我尝试在DispositionFilters linq中添加.Where(item => item != null),但它给出了一个错误,说明这将始终为真。

这是我的代码:

var filters = new RespondentCSVFilters
            {
                CSVFilters = new CSVFilters 
                { 
                    DispositionFilters = model.FilterSet.Dispositions.Where(item=>item != null).ToList().ConvertAll(item => (int)((RespondentStatus)Enum.Parse(typeof(RespondentStatus), item.ToString()))),
                    EthnicitiesFilters = model.FilterSet.Ethnicities.ConvertAll(item => (int)((Ethnicity)Enum.Parse(typeof(Ethnicity), item.ToString()))),
                    GenderFilters = model.FilterSet.Genders.ConvertAll(item => (int)((Gender)Enum.Parse(typeof(Gender), item.ToString()))),
                    SourcesFilters = model.FilterSet.Sources.ConvertAll(item => (int)((RespondentSource)Enum.Parse(typeof(RespondentSource), item.ToString()))),
                }
            };

我不知道如何进行更改以处理空值。

1 个答案:

答案 0 :(得分:2)

  

我尝试添加.Where(item => item!= null)

但是这只会检查每个项目是否为null,而不是源(“Dispositions”)。要流畅地检查null(不添加一堆“if”语句),EmptyIfNull扩展可能会有所帮助:

public static class Extensions
{
    public static IEnumerable<T> EmptyIfNull<T>(this IEnumerable<T> self)
    {
        return self == null ? Enumerable.Empty<T>() : self;
    }
}

现在你可以写......

model.FilterSet.Dispositions.EmptyIfNull().Where( ... )

如果model.FilterSet.Dispositions为null,则不会出现异常,但该语句将计算为空集。