#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()