linq - 如何以我自己的方式扩展 LINQ select 方法

标签 linq

如果源不为空,以下语句可以正常工作:

Filters.Selection
            .Select(o => new GetInputItem() { ItemID = o.ItemId })

如果“Filters.Selection”为空(显然),它就会爆炸。有没有可能的方法来编写我自己的扩展方法,如果源为空,则返回 null,或者如果源不为空,则执行“Select”函数。

比如说,如下所示:

var s = Filters.Selection
                .MyOwnSelect(o => new GetInputItem() { ItemID = o.ItemId })

如果“Filters.Selection”为 null,则“s”将为 null,否则“s”将包含使用 LINQ Select 计算的“func”。

这只是为了了解有关 LINQ 扩展/自定义的更多信息。

谢谢。

最佳答案

你可以这样做:

public static IEnumerable<U> SelectOrNull<T,U>(this IEnumerable<T> seq, Func<T,U> map)
{
    if (seq == null)
         return Enumerable.Empty<U>(); // Or return null, though this will play nicely with other operations
    return seq.Select(map);
}

关于linq - 如何以我自己的方式扩展 LINQ select 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14882176/

相关文章:

c# - 如何使用 LINQ 或响应式(Reactive)扩展拆分带有嵌入转换标记的列表?

c# - 查看 LINQ 生成的 SQL

C# Linq - 扩展方法

c# - 使用linq返回具有多个存储在字典中的值的列表

c# - 有没有更好的方法调用 LINQ Any + NOT All?

C# - System.FormatException 类型的未处理异常 - 列出字符串以列出 int

c# - 首先通过将类型作为参数传递来动态实例化 Entity Framework 数据库中的模型对象

C# 10 .Net 6 MinBy MaxBy Linq 投影到单个属性

c# - Linq 代码不返回正确的记录

c# - Linq 计数麻烦