C# 方法组筛选器空值
我有以下代码:C# 方法组筛选器空值,c#,.net,linq,C#,.net,Linq,我有以下代码: IEnumerable<DestinationResult> destinations = _repository.GetDestinationData(); IEnumerable<Destination> finalDestinations = destinations.Select(GetAdditionalDestinationInfo); private Destination GetAdditionalDe
IEnumerable<DestinationResult> destinations =
_repository.GetDestinationData();
IEnumerable<Destination> finalDestinations =
destinations.Select(GetAdditionalDestinationInfo);
private Destination GetAdditionalDestinationInfo(DestinationResult d){ /* CODE */}
如何仍然使用方法组调用SelectGetAdditionalDestinationInfo并过滤掉可能从GetAdditionalDestinationInfo返回的null值,而不必再次调用该方法来检查where子句中的null
比如:
IEnumerable<Destination> finalDestinations =
destinations.Select(GetAdditionalDestinationInfo != null)
选择将输入记录映射到输出记录,一个接一个-没有筛选的机会。相反,您希望添加另一个,其中:
选择将输入记录映射到输出记录,一个接一个-没有筛选的机会。相反,您希望添加另一个,其中:
为什么?为什么要避免匿名方法/lambda?如果在当前select之后添加where,您将在GetAdditionalDestinationInfo的结果上调用它,函数本身不会被额外调用多次枚举,而不会像ToList那样执行某些操作,因此,您可以安全地选择目的地。选择GetAdditionalDestinationInfo.Whereres=>res=无效的或者,如果GetAdditionalDestinationInfo返回空值,您是否正在寻找使用原始目标的枚举,这可以通过目标来完成。Selectd=>GetAdditionalDestinationInfo??d然后,默认值可以在GetAdditionalDestinationInfo中返回,为什么?为什么要避免匿名方法/lambda?如果在当前select之后添加where,您将在GetAdditionalDestinationInfo的结果上调用它,函数本身不会被额外调用多次枚举,而不会像ToList那样执行某些操作,因此,您可以安全地选择目的地。选择GetAdditionalDestinationInfo.Whereres=>res=无效的或者,如果GetAdditionalDestinationInfo返回空值,您是否正在寻找使用原始目标的枚举,这可以通过目标来完成。Selectd=>GetAdditionalDestinationInfo??d然后,可以在GetAdditionalDestinationInfo本身内部返回默认值
IEnumerable<Destination> finalDestinations =
destinations
.Select(GetAdditionalDestinationInfo)
.Where(i => i != null);