如何在没有foreach的情况下返回方法中的值?我的意思是,我可以很容易地将其划分为foreach循环,但我需要以IEnumerable<(string category, IEnumerable<string> productsName)>的格式得到答案.我能做什么?

public static IEnumerable<(string category, IEnumerable<string> productsName)> GroupByCategory()
{
    List<Product> products = Products.ProductList;

    var orderGroups = products.Where(p => p.ProductId <= 20).GroupBy(p => p.Category,
        (Key, g) => new { Category = Key, Products = g });

    foreach (var i in orderGroups)
    {
        Console.WriteLine($"Category={i.Category}:");
        foreach (var p in i.Products)
        {
            var s = $"ProductID={p.ProductId},
                    Product Name={p.ProductName},
                    UnitPrice={p.UnitPrice},
                    UnitsInStock={p.UnitsInStock}";

            Console.WriteLine(s);
        }
    }
}

推荐答案

像这样的东西可能对你有用.特别是select和嵌套select语句.

public IEnumerable<(string category, IEnumerable<string> productsName)> GroupByCategory()
{
    List<Product> products = Products.ProductList;

    return products.Where(p => p.ProductId <= 20)
                   .GroupBy(p => p.Category)
                   .Select(g => (g.Key, g.Select(p => p.ProductName)));
}

我个人会创建一个模型来更好地封装结果,比如CategoryGroup.然后,您可以为它构建一个构造函数,将IGrouping<string, Product>作为参数来进一步清理.Select,但这只是首选项!

Csharp相关问答推荐

ASP.NET Core -是否可以对所有最小API端点应用过滤器?

如何将字节数组转换为字符串并返回?

如何告诉自己创建的NuGet包在应用程序中发生了变化?

C#DateTime.ToString在ubuntu和centos中返回不同的结果

Azure DEVOPS找不到定制的Nuget包

Blazor WebApp:原始异常:AADSTS700025:客户端是公共的,因此既不应显示客户端,也不应显示客户端

如何从ASP.NET核心MVC视图和Blazor传递数据

从依赖项容器在.NET 8中的Program.cs文件中添加IOC

单行上的ReSharper数据标注

如何将MemberInitExpression添加到绑定中其他Lambda MemberInitExpression

LINQ to Entities中的加权平均值

如何使用Npgsql从SELECT获得所有查询结果

这是否比决定是否使用ConfigureAWait(False)更好?

如何在单击按钮后多次异步更新标签

将两个for循环更改为一条LINQ语句

为什么我的属性即使没有显式地设置任何[必需]属性,也会显示验证?

.NET文档对继承的困惑

获取应用程序版本信息时出现奇怪信息

如何对列表<;列表>;使用集合表达式?

反编译源代码时出现奇怪的字符