c# - 使用 Linq,如何对目标对象中的列表中的对象进行 GroupBy

标签 c# linq grouping

可能措辞不太正确,但这是我所拥有的,这是我想要实现的结果:

class Cake
{
public List<string> Ingrediants {get;set;}
public DateTime Baked {get;set;}
public string CakeName {get;set;}
}

List<Cake> cakes= new List<Cake>();
cakes.Add(new Cake() {CakeName = "Cake1", Ingrediants = new List<string>() {"Sugar", "Chocolate"}});
cakes.Add(new Cake() {CakeName = "Cake2", Ingrediants = new List<string>() {"Sugar", "Butter"}});
cakes.Add(new Cake() {CakeName = "Cake3", Ingrediants = new List<string>() {"Stevia", "Butter"}});

我想按成分对蛋糕进行分组。所以我想结束这个:

 - Sugar
        Cake1
        Cake2
 - Stevia
        Cake3 
 - Chocolate
        Cake1
 - Butter
        Cake2
        Cake3

提前致谢!

最佳答案

如果您不介意查询理解,这里有一个替代方案(注意更正的拼写):

IEnumerable<IGrouping<string,Cake>> query =
    from cake in cakes
    from ingredient in cake.Ingredients
    group cake by ingredient;

惊喜!这是一个有效的查询!语言规范允许理解以分组结束。 IGrouping<string,Cake>技术上是 IEnumerable<Cake>有一个Key类型属性 string - 在这种情况下是成分。编译器会将其转换为与其他答案几乎相同的代码。

我们可以通过引入 into 来更改查询以生成与其他答案相似的相同泛型类型。和一个 select查询继续的子句:

var query =
    from cake in cakes
    from ingredient in cake.Ingredients
    group cake by ingredient into cakesGrouped
    select new { Ingredient = cakesGrouped.Key, 
        Cakes = cakesGrouped.ToList() };

恕我直言,流式语法和查询语法都值得了解。干杯!

关于c# - 使用 Linq,如何对目标对象中的列表中的对象进行 GroupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14572718/

相关文章:

c# - 如何使用 LINQ to XML 将新元素添加到 Windows Phone 7 上的现有 XML 文件?

android - 关于 http ://stackoverflow. com/questions/2381560/how-to-group-a-3x3-grid-of-radio-buttons

php - PHP 合并具有相同 ID 的 MySQL 行

C# "lock"关键字 : Why is an object necessary for the syntax?

c# - 选择移动游戏对象时遇到困难

linq - 相当于 LINQ SelectMany 方法的 PowerShell

c# - 组合或连接从单独的 XML 文件中读取的对象的最有效方法

c# - 如何使用 UNION 对字符/字符串数组进行分组?

c# - Xamarin - 检索项目 : No resource found that matches the given name 'Theme.AppCompat.Light.DarkActionBar' 的父项时出错

c# - 我是否在 C# 函数中适本地关闭了这个 SQL 连接?