我有具有 ID、名稱和價格的產品串列。我想使用價格在控制臺中顯示它,例如
價格 1 到 100 -- 產品串列
價格 101 到 200 -- 產品串列等等,直到最后的最高價格。我需要在運行時根據最高價格確定需要創建多少段。
uj5u.com熱心網友回復:
如果你有一個名為的串列products,它有一個名為的屬性,Price你可以使用一個基本Linq運算式OrderBy和Where
編輯:現在我更好地理解了您的問題,您可以為每個 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 次迭代以獲取每個段。
uj5u.com熱心網友回復:
這里有兩個問題需要解決。首先,您需要弄清楚,對于任何給定的價格,如何將其分類到一個價格范圍內。您在帖子中提供的資訊不夠具體,除非您的所有價格都是整數,但我會在這里做出有根據的猜測。
// 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 }
uj5u.com熱心網友回復:
嘗試以下操作:
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();
它將回傳串列串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/522803.html
標籤:C#。网林克
