首页 > 解决方案 > 转义空值 LINQ

问题描述

我对这个 linq 表达式有疑问:

var invs = ids.Split(new[] {'|'}, StringSplitOptions.RemoveEmptyEntries)
                        .Select(x => sitecoreContext.GetItem<Inv>(new ID(x).Guid))
                        .ToList();

如何在 .Select 中检查 null?SitecoreContext.GetItem(new ID(x).Guid)) 崩溃(因为项目未发布,或创建但未发布)所以我需要一种方法来首先验证项目是否存在,然后才能进行选择。

谢谢你。

标签: linqsitecore

解决方案


where您可以使用语句过滤所有非空项目。

var nonNull = list.Where(element => element != null);

我通常为此使用扩展方法:

public static class EnumerableExtensions
{
    public static IEnumerable<T> WhereNotNull<T>(this IEnumerable<T> enumerable)
        where T: class
    {
        return enumerable.Where(element => element != null);
    }
}

鉴于您的示例,您可以使用如下语句:

var invs = ids.Split(new[] {'|'}, StringSplitOptions.RemoveEmptyEntries)
              .WhereNotNull()
              .Select(x => sitecoreContext.GetItem<Inv>(new ID(x).Guid))
              .ToList();

推荐阅读