Linq在查询中添加新变量

时间:2016-03-17 12:51:24

标签: c# linq

如果我按名称使用分组:

List<Recipe> Recipes = Show.GroupBy(t => t.Name)
        .Select(g => new Recipe() { Name = g.Key, components = g.Select(t => new Component {Amount= t.Amount, Ingredient= t.Ingredient })
        .ToList() })
        .ToList();

它写在Nameg.Key但如果我想在linq DishID中添加新变量,那么如何从DishID写出DisplayRecipe

List<Recipe> Recipes = Show.GroupBy(t => t.Name)
        .Select(g => new Recipe() { Name = g.Key,DishID= ???, components = g.Select(t => new Component {Amount= t.Amount, Ingredient= t.Ingredient })
        .ToList() })
        .ToList();

型号:

public class DisplayRecipe
{
    public string Name { get; set; }
    public string Ingredient { get; set; }
    public string Amount {get;set;}
    public int DishID { get; set; }
}

public class Recipe
{
    public string Name { get; set; }

    public int DishID { get; set; }

    public List<Component> components {get;set;}
}

public class Component
{
    public string Ingredient { get; set; }

    public string Amount { get; set; }
}

2 个答案:

答案 0 :(得分:2)

如果仅按Name分组,则每个组可能包含具有不同DishID值的项目。

如果您想同时按NameDishID分组,那么您可以这样做:

List<Recipe> Recipes =
    Show.GroupBy(t => new {t.Name, t.DishID})
    .Select(g => new Recipe()
    {
        Name = g.Key.Name,
        DishID = g.Key.DishID,
        components = g.Select(t => new Component
        {
            Amount= t.Amount,
            Ingredient= t.Ingredient
        }).ToList()
    }).ToList();

答案 1 :(得分:0)

评论太久了(至少举例) - 如果你有:

Name     DishId    Components
name1    1         null
name1    2         null
name2    3         null

Name上为name2执行groupby,显然您希望DishId为3 - 但name的{​​{1}}呢?

您必须指定要使用的DishId,name1first等。 重新考虑您的群组。如果始终将firstordefaultname组合在一起,您可能打算按这两个字段进行分组。