是否存在Lambda Else条件
本文关键字:条件 Else Lambda 存在 是否 | 更新日期: 2023-09-27 18:23:47
我正在使用lambda语句设置foreach循环:
foreach (Shape shape in shapefile.Where(x=>x.GetMetadata(IgnoreField) != IgnoreValue))
IgnoreField
和IgnoreValue
是可选参数。
如果这些字段为空(未使用),我如何更改我的foreach以说明这一点?有Else语句或类似的语句吗?
我想你想要的是…如果它们不是null。。。然后检查它们。。。但是如果它们为null,那么忽略它们,对吗?
foreach (Shape shape in shapefile.Where(x=>
x.IgnoreField == null ||
x.IgnoreValue == null ||
x.GetMetadata(IgnoreField) != IgnoreValue)
还要注意,当你缩进你的LinQ时,它是如何更容易地看到它在做什么的?
我使用的另一种格式化技术,尤其是在像这样的foreach语句上,是在像那样在foreach语句中使用可枚举项之前,将其存储在一个适当命名的变量中…
var shapesFilteredByIgnores = shapefile.Where(x=>
x.IgnoreField == null ||
x.IgnoreValue == null ||
x.GetMetadata(IgnoreField) != IgnoreValue)
foreach (Shape shape in shapesFilteredByIgnores)
当然,只有当您有一个有意义的变量名来分配它时,这一点才会更清楚。
这不是魔法。完全使用您在lambda:之外会使用的内容
foreach (Shape shape in shapefile.Where(x=>
(x.IgnoreField != null && // If both optional fields are present
x.IgnoreValue != null &&
x.GetMetadata(IgnoreField) != IgnoreValue) // Then only where metadata for
// ignored field is not the ignored value
||
(x.IgnoreField == null || x.IgnoreValue == null))) // But if either field absent
// then return all data
foreach (Shape shape in shapefile.Where(x=>IgnoreField==null || IngoreValue==null || x.GetMetadata(IgnoreField) != IgnoreValue))
您可以简单地根据是否有要检查的值有条件地应用Where
:
var query = shapefile.AsEnumerable();
if(IgnoreField!=null && IngoreValue!=null)
query = query.Where(x=>x.GetMetadata(IgnoreField) != IgnoreValue);
foreach (Shape shape in query)
{...}
与这里的其他答案不同,这不需要为序列中的每个项目检查null
的两个字段;它检查它们一次,只有在能够的情况下才应用过滤器。