我有 IQueryable 类型 T 的对象列表,我想将其转换为 K 类型的对象
List<K> tranformedList = originalList.Select(x => transform(x)).ToList();
如果变换函数无法变换对象,则返回 null。如果我想过滤掉 null 元素,我可以调用
List<K> tranformedList = originalList.Select(x => transform(x))
.Where(y => y != default(K))
.ToList();
或者在 LINQ 中调用 Select 时是否有其他方法可以过滤掉 null 元素?
你不能做这样的事情吗:
List<K> tranformedList = originalList.Select(x => tranform(x))
.Where(y => y != null) //Check for nulls
.ToList();
那又如何
List<K> tranformedList = originalList
.Select(transform)
.OfType<K>()
.ToList()
同时负责拆箱并消除空值(特别是当
K
是 struct
时)
David B 我不相信你的代码
.Where(y => y != null)
当 K
是 int
时才有效!如果 K
是 int
!,那么你将无法编译该代码
List<K> tranformedList = originalList.Select(x => transform(x))
.Where(y => !string.IsNullOrEmpty(y))
.ToList();
在 Select linq 查询之后,在Where 查询中使用 !string.IsNullOrEmpty("string") 或 string.IsNullOrWhiteSpace("string") 过滤空值。
使用Where而不是Select (Linq)。
Where 直接返回不带空值的列表
List tranformedList = originalList.Where(x => x != null).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();
我认为 Nathan 的效果也很好,但没那么冗长