linq 如何在c#控制台应用程序中使用按价格分组显示产品

ltskdhd1  于 2022-12-06  发布在  C#
关注(0)|答案(3)|浏览(181)

我有一个产品列表,其中有ID,名称和价格。我想在控制台中显示它使用的价格,如
价格1 - 100 --产品列表
价格101到200 --产品列表,依此类推,直到最后一个最高价格。我需要在运行时确定我需要根据最高价格创建多少个段。

ghg1uchk

ghg1uchk1#

如果您有一个名为products的列表,其中包含一个名为Price的属性,则可以将基本Linq表达式与OrderByWhere一起使用

编辑:现在我对您的问题有了更好的理解,您可以为每个100分的细分市场创建一个新的列表。

就像这样:

products = products.OrderBy(x => x.Price).ToList();
var subProducts = products.Where(x => x.Price > 0 && x.Price < 100).ToList();
// then print each item in the list here.
// then do the next segment
subProducts = products.Where(x => x.Price >= 100 && x.Price < 200).ToList();

你可以把这个基本格式放在一个循环中,然后以100为单位进行迭代,得到每个段。

holgip5t

holgip5t2#

这里有两个问题需要解决。首先,你需要弄清楚,对于任何给定的价格,如何将其归类到一个价格区间。除非你的价格都是整数,否则你在帖子中提供的信息不够具体,但我会在这里做一个有根据的猜测。

// Model
record ProductPriceRange(decimal Low, decimal High);

// Desired behavior
GetPriceRange(0.01m).Should().Be(new ProductPriceRange(0.01m, 100m));
GetPriceRange(100m).Should().Be(new ProductPriceRange(0.01m, 100m));
GetPriceRange(100.01m).Should().Be(new ProductPriceRange(100.01m, 200m));

// Implementation
ProductPriceRange GetPriceRange(decimal price)
{
    var groupBasis = (int)(((price - 0.01m) / 100)) * 100 + 0.01m;
    return new ProductPriceRange(groupBasis, groupBasis + 99.99m);
}

然后,您的分组代码可能如下所示:

var productGroups =
    from p in products
    group p by GetPriceRange(p.Price) into g
    select new {
        PriceRange = g.Key,
        Products = g.ToList()
    };
foreach (var g in productGroups)
{
    Console.WriteLine($"{g.PriceRange.Low} - {g.PriceRange.High}: {string.Join(", ", g.Products)}");
}

示例输出:
0.01- 100.00:产品{价格= 0.01 }、产品{价格= 99.99 }、产品{价格= 100 }
100点01分至200点00分:产品{价格= 100.01 }、产品{价格= 199.99 }、产品{价格= 200 }
200.01至300.00:产品{价格= 200.01 }

wnavrhmk

wnavrhmk3#

请尝试以下操作:

var query = products
   .GroupBy(p => (int)(p.Price / 100))
   .OrderBy(g => g.Key)
   .Select(g => new {
      Lower = g.Min(x => x.Price),
      Higher = g.Max(x => x.Price),
      Items = g.OrderBy(x => x.Price).ToList())
   })
   .ToList();

它将返回列表的列表。

相关问题