Подтвердить что ты не робот

Фильтрация значений Null в Select

У меня есть 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?

4b9b3361

Ответ 1

Разве вы не можете сделать что-то вроде этого:

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

Ответ 2

Что насчет

    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!

Ответ 3

Вы можете попробовать цикл 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();

Я думаю, что Натан тоже работает, но менее подробный

Ответ 4

Используйте "Где вместо выбора" (Linq).

Где возвращает список без нулевых значений напрямую

Список tranformedList = originalList.Where(x => x! = Null).ToList();