Linq Вернуться сгруппированный результат - PullRequest
0 голосов
/ 25 ноября 2018

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

public class Ingredient
{
    public int IngredientId { get; set; }

    public string Name { get; set; }

    public bool IsVegetarian { get; set; }

    public int Type { get; set; }
}

Некоторые данные выборки: образцы ингредиентов

Для каждого уникального значения «Тип» я хочу вернуть список ингредиентов с этим типом.Окончательный результат будет сохранен в ICollection типа IngredientViewModel.

public class IngredientViewModel : Model
{
    public IngredientCategory Category { get; set; }

    public List<Ingredient> Ingredients { get; set; }
}

Как наилучшим образом получить все ингредиенты, сгруппированные по категориям, в одну поездку базы данных с использованием выражений linq или lambda?

В настоящее время у меня есть следующий фрагмент, который я нахожу немного грязным:

public async Task<IEnumerable<IngredientViewModel>> GetIngredientsPerCategoryAsync()
{
        IEnumerable<Ingredient> result = await _repo.GetAllAsync();

        IEnumerable<IngredientViewModel> viewModels = result.GroupBy(
            x => x.Type,
            (category, ingredients) => new IngredientViewModel()
            {
                Category = (IngredientCategory)category,
                Ingredients = MapFromEntities(ingredients)
            })
            .OrderBy(x => x.Category.ToString())
            .ToList();

        return viewModels;
}

1 Ответ

0 голосов
/ 25 ноября 2018

Наиболее очевидным будет: Ingredients = g.ToList().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...