如果我按名称使用分组:
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();
它写在Name
值g.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; }
}
答案 0 :(得分:2)
如果仅按Name
分组,则每个组可能包含具有不同DishID
值的项目。
如果您想同时按Name
和DishID
分组,那么您可以这样做:
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,name1
,first
等。 或 重新考虑您的群组。如果始终将firstordefault
和name
组合在一起,您可能打算按这两个字段进行分组。