2013-12-13 35 views
2

我试图修复这些linq语句,以便在模型为null时不会出错。处理模型中的空值传递到控制器

例如: model.FilterSet.Dispositions可能为空。而model.FilterSet.GenderFilters可能不会。

我的当前linq语句给出了错误,如果有一个null,所以我试图在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()))), 
       } 
      }; 

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

+0

您的意思是模型的'model.FilterSet.Dispositions'字段可以是'null',或者'model.FilterSet.Dispositions'内的其中一个项目可以是'null'? – dasblinkenlight

+0

模型的字段可能为null,例如model.FilterSet.Dispositions可能完全为空。 – allencoded

+0

我会分手以提高可读性 –

回答

2

我尝试添加。凡(项目=>项目!= 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 ,你不会得到一个异常,但是该语句将评估为一个空集。

+0

+1 - 非常好! – ataravati

相关问题