Используйте ToDictionary<TSource, TKey>
method после вызова GroupBy
для выбора сгруппированных результатов в Dictionary
нужного типа.
Обратите внимание, что метод принимает два параметра (лямбда) (ну, конкретная перегрузка, используемая здесь, по крайней мере). Первый - это селектор, который определяет ключи (и неявно, их тип), а второй определяет значения (также неявно определяя их тип).
Как показано в other answer, метод GroupBy
вернет IEnumerable<IGrouping<Guid,Customer>>
, который вы можете перебрать непосредственно, например, так:
foreach (IGrouping<Guid, Customer> grp in customers.GroupBy(obj => obj.StoreId))
{
Guid storeID = grp.Key;
IEnumerable<Customer> customerCollection = grp;
foreach (Customer customer in customerCollection)
{
// Insert code here.
}
}
выше, вероятно, лучше подход (например, если ваша коллекция лениво оцененный, он, вероятно, сохранит это), но если это не проблема для вас, нижеприведенное решение даст вам точно, о чем вы просили.
В приведенном ниже примере единственная линия, которую вы, вероятно, интересуете, это last. Другой код - просто ускорить его быстрое выполнение в чем-то вроде LinqPad для предварительного просмотра результатов.
// Just populating some sample data.
List<Guid> storeIDs = new List<Guid>
{
Guid.NewGuid(),
Guid.NewGuid(),
Guid.NewGuid(),
};
List<Customer> customers = new List<Customer>();
customers.Add(new Customer { Id = Guid.NewGuid(), StoreId = storeIDs[0], Name = "John" });
customers.Add(new Customer { Id = Guid.NewGuid(), StoreId = storeIDs[1], Name = "Jacob" });
customers.Add(new Customer { Id = Guid.NewGuid(), StoreId = storeIDs[2], Name = "Schmidt" });
customers.Add(new Customer { Id = Guid.NewGuid(), StoreId = storeIDs[0], Name = "May" });
customers.Add(new Customer { Id = Guid.NewGuid(), StoreId = storeIDs[1], Name = "Naomi" });
customers.Add(new Customer { Id = Guid.NewGuid(), StoreId = storeIDs[2], Name = "Tou" });
// Use the GroupBy method to group the customers by the StoreID
// Then, select the grouped data into a Dictionary.
// Use the StoreID as the key
// To make TValue a List<Customer> call ToList on the IGrouping.
Dictionary<Guid, List<Customer>> result = customers.GroupBy(obj => obj.StoreId).ToDictionary(k => k.Key, v => v.ToList());
Вы хотите набор списков, но список списков не в порядке? Какие? –
Как «GroupBy» не дает вам именно то, что вам нужно? Результаты этого уровня прекрасно согласуются с тем, что вы говорите, что хотите сделать с ним. – krillgar
В связанном ответе оператор 'Select' отбрасывает информацию группировки и возвращает список списков. Использование 'GroupBy' - это то, что вы хотите. –