LINQ - взять x объектов из базы данных для каждого значения свойства объекта - PullRequest
0 голосов
/ 26 августа 2018

У меня есть объект:

public class Component
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public ProductType Type { get; set; }
}

ProductType

public enum ProductType
{
    Harddrive = 1,
    GraphicCard,
    ComputerCase,
}

Я пытаюсь получить список Product , который содержит 15 случайных элементов (5 наProductType) в одном LINQ.

ComputerCase, GraphicCard и Harddrive наследуются из одного базового класса

На данный момент у меня есть что-то вроде этого:

        var response = db.Components
            .Select(x => new Product
            {
                Id = x.Id,
                Name = x.Name,
                Type = x.Type,
            }).ToList();

но я понятия не имею, как я могу достичь того, что мне нужно.Кто-нибудь может мне помочь с этим?

1 Ответ

0 голосов
/ 26 августа 2018

Составьте группы из Components с одинаковыми ProductType. Из полученного набора групп берут первые Component в группе. Из этого результата возьмите первые 5 пунктов.

var result = myComponents.                    // take the collection of Components
    .GroupBy(component => component.Type)     // group this into groups of components with same Type
    .Select(group => group.FirstOrDefault())  // from every group take the first element
    .Take(5)                                  // take only the first five

Конечно, если вы действительно хотите получить правильный случайный случай, вам придется извлечь все Component группы в локальную память и использовать RND для извлечения случайных групп и случайных элементов из каждой выбранной группы

...