Получение отдельных записей с помощью лямбда-выражения

#c# #lambda

#c# #лямбда

Вопрос:

У меня есть объект класса ревизии, который может иметь несколько объектов класса деталей. И в каждом классе деталей у меня может быть несколько префиксов (его класс ссылочного типа). Теперь я хочу получить отдельные записи префикса для каждой детали в ревизии. Как я могу это сделать, используя лямбда-выражение?

 List<ReferenceType> prefixes = (List<ReferenceType>)revision.Details
    .GroupBy(p => p.Prefix.Id)
    .Select(grp => grp.First());
  

Все, что я хочу, это выбрать отдельные записи префиксов в классе details. Приведенный выше код не работает, его ошибка выбрасывания, такая как ошибка выбрасывания, не может преобразовать детали в ссылочный тип. Как получить префиксы dictinct в ревизии -> Подробности -> Префиксы??

Комментарии:

1. @Tronics Попробуйте и узнайте. Работает ли это?

2. Какую ошибку вы получаете с представленным вами кодом? Это приведение выглядит очень подозрительно … 🙂

3. Это приведение не будет работать. Следует использовать ToList() вместо и забыть приведение.

4. Какие критерии вы используете для определения Distinct? Прямо сейчас вы используете grp.First, который получает только один элемент. Distinct не будет работать, потому что у вас есть класс, который имеет несколько свойств. Вам нужны некоторые критерии, такие как IEquals, чтобы определить, какие свойства используются для критериев.

5. Что-то вроде этого может помочь: bar prefixes = revision.Details .GroupBy(p => p.Prefix.Id) .Select(grp => grp.FirstOrDefault()).Distinct().ToList();

Ответ №1:

Это сработало для меня…

доработка.Подробные сведения.Где(x => x.Prefix != null).Выберите(y => y.Префикс).Distinct()