Итак, вот решение. Он не идеален с точки зрения производительности, потому что GroupBy
в конце немного избыточен, в основном для получения правильных типов, но это не очень дорогостоящая операция, поэтому это должно быть достаточно хорошим.
groupedList = groupedList.SelectMany(group =>
group.DistinctBy(mytype => mytype.SomeProperty)
.Select(item => new
{
key = group.Key,
element = item,
}))
.GroupBy(pair => pair.key, pair => pair.element)
.ToList();
Если вы создаете Group
класс, например, так:
public class Group<TKey, TElement> : IGrouping<TKey, TElement>
{
private IEnumerable<TElement> elements;
public Group(TKey key, IEnumerable<TElement> elements)
{
this.elements = elements;
Key = key;
}
public TKey Key { get; private set; }
public IEnumerator<TElement> GetEnumerator()
{
return elements.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public static Group<TKey, TElement> CreateGroup<TKey, TElement>(
TKey key, IEnumerable<TElement> elements)
{
return new Group<TKey, TElement>(key, elements);
}
Тогда вы можете сделать:
groupedList = groupedList.Select(group =>
(IGrouping<string, Foo>)CreateGroup(group.Key,
group.DistinctBy(mytype => mytype.SomeProperty)))
.ToList();
Это именно то, что мне нужно, спасибо. Я не обрабатываю много данных, поэтому производительность не должна быть проблемой. – user1151923