我正在尝试修复这些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()))),
}
};
我不知道如何进行更改以处理空值。
答案 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,则不会出现异常,但该语句将计算为空集。