筛选 Select 中的 Null 值

我有一个 T 类型对象的 IQueryable 列表,我想把它转换成 K 类型的对象

List<K> tranformedList = originalList.Select(x => transform(x)).ToList();

如果无法转换对象,转换函数返回 null

List<K> tranformedList = originalList.Select(x => transform(x))
.Where(y => y != default(K))
.ToList();

或者在 LINQ 中调用 Select 时,是否有其他方法可以过滤掉 null 元素?

93698 次浏览

你就不能这么做吗:

List<K> tranformedList = originalList.Select(x => tranform(x))
.Where(y => y != null) //Check for nulls
.ToList();

您可以尝试使用 for 循环,并将非空值添加到新转换的列表中。

foreach (var original in originalList)
{
K transformed = tranform(orignal);
if (transformed != null)
{
tranformedList.Add(transformed);
}
}

或者你可以试试

        List<K> tranformedList = (from t in
(from o in originalList
select tranform(o))
where t != null
select t).ToList();

我认为内森的作品也不错,但没那么冗长

关于什么

    List<K> tranformedList = originalList
.Select(transform)
.OfType<K>()
.ToList()

同时处理取消装箱和去除 null (特别是当 K 是结构时)

我不相信你的代码 .Where(y => y != null)工作时 K 是一个整数!如果 K 是一个整型数,那么你就不可能得到要编译的代码!

使用 Where 而不是 Select (Linq)。

在哪里直接返回没有空值的列表

其中(x = > x! = null)

List<K> tranformedList = originalList.Select(x => transform(x))
.Where(y => !string.IsNullOrEmpty(y))
.ToList();

在 Selectlinq 查询之后,在 Where 查询中使用 IsNullOrEmpty (“ string”)IsNullOrWhiteSpace (“ string”)过滤空值。