Ответ 1
Разве вы не можете сделать что-то вроде этого:
List<K> tranformedList = originalList.Select(x => tranform(x))
.Where(y => y != null) //Check for nulls
.ToList();
У меня есть IQueryable список объектов типа T, которые я хочу преобразовать в объекты типа 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();
или есть ли другой способ фильтрации нулевых элементов при вызове Select в LINQ?
Разве вы не можете сделать что-то вроде этого:
List<K> tranformedList = originalList.Select(x => tranform(x))
.Where(y => y != null) //Check for nulls
.ToList();
Что насчет
List<K> tranformedList = originalList
.Select(x => transform(x))
.OfType<K>()
.ToList()
Принимает решение об удалении ненужных удалений одновременно (особенно, когда K является структурой)
David B Я не верю, что ваш код .Where(y => y != null)
работает, когда K является int! NO NO WAY вы получите этот код для компиляции, если K является int!
Вы можете попробовать цикл 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();
Я думаю, что Натан тоже работает, но менее подробный
Используйте "Где вместо выбора" (Linq).
Где возвращает список без нулевых значений напрямую
Список tranformedList = originalList.Where(x => x! = Null).ToList();