2015-07-20 70 views
0

我有以下代码:方法组过滤器的空值

IEnumerable<DestinationResult> destinations = 
     _repository.GetDestinationData(); 

IEnumerable<Destination> finalDestinations = 
     destinations.Select(GetAdditionalDestinationInfo); 

private Destination GetAdditionalDestinationInfo(DestinationResult d){ /* CODE */} 

如何仍可以使用该方法的群组通话(选择(GetAdditionalDestinationInfo)),并筛选出可能从GetAdditionalDestinationInfo返回空值(不必须再次调用该方法来检查where子句中的空值)。

喜欢的东西:

IEnumerable<Destination> finalDestinations = 
     destinations.Select(GetAdditionalDestinationInfo != null) 
+0

为什么?为什么你想避免匿名方法/ lambda? – Luaan

+0

如果你在当前选择之后添加一个地方,你会在'GetAdditionalDestinationInfo'的结果上调用它,函数本身不会被称为额外的时间(不需要像ToList那样进行多次枚举) ,所以你可以安全地执行'destinations.Select(GetAdditionalDestinationInfo).Where(res => res!= null);' –

+1

或者你正在寻找一个使用原始目的地的枚举,如果'GetAdditionalDestinationInfo'返回null(这可以完成with'destinations.Select(d => GetAdditionalDestinationInfo(d)?? d)')然后再次,默认可以返回GetAdditionalDestinationInfo本身 –

回答

4

Select地图输入记录输出记录,一个接一个 - 有过滤没有机会。相反,你想添加另一个Where

IEnumerable<Destination> finalDestinations = 
    destinations 
    .Select(GetAdditionalDestinationInfo) 
    .Where(i => i != null); 
+0

我觉得很蠢。的xD –