我有一個具有給定結構的訂單專案串列:
OrderItem { Id = 1, Name = "First Item", Quantity = 2 }
OrderItem { Id = 2, Name = "Second Item", Quantity = 2 }
OrderItem { Id = 3, Name = "Third Item", Quantity = 1 }
我想將其展平為以下結構:
DBItem{ Id = 1, Name = "First Item" }
DBItem{ Id = 2, Name = "First Item" }
DBItem{ Id = 3, Name = "Second Item" }
DBItem{ Id = 4, Name = "Second Item" }
DBItem{ Id = 5, Name = "Third Item" }
有沒有使用 LINQ 的方法SelectMany?
uj5u.com熱心網友回復:
您可以使用Enumerable.Range生成附加記錄:
var dbItems = orderItems
.OrderBy(oi => oi.Id) // ensure correct order
.SelectMany(oi => Enumerable.Range(0, oi.Quantity), (oi, n) => oi) // records duplication
.Select((oi, idx) => new DBItem // Select overload with index
{
Id = idx 1,
Name = oi.Name,
})
.ToList();
uj5u.com熱心網友回復:
這對我來說似乎很簡單:
var items = new[]
{
new OrderItem { Id = 1,Name = "First Item", Quantity = 2 },
new OrderItem { Id = 2,Name = "Second Item", Quantity = 2 },
new OrderItem { Id = 3,Name = "Third Item", Quantity = 1 },
};
var dbItems =
items
.SelectMany(item => Enumerable.Repeat(item.Name, item.Quantity))
.Select((name, index) => new DBItem { Id = index 1, Name = name });

uj5u.com熱心網友回復:
var items = new List<OrderItem>
{
new OrderItem { Id = 1,Name = "First Item", Quantity = 2 },
new OrderItem { Id = 2,Name = "Second Item", Quantity = 2 },
new OrderItem { Id = 3,Name = "Third Item", Quantity = 1 },
};
var dbitems = new List<DBItem>();
var counter = 1;
items.ForEach(item =>
{
for (int i = 0; i < item.Quantity; i )
{
dbitems.Add(new DBItem
{
Id = counter ,
Name = item.Name,
});
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/529370.html
標籤:C#。网林克拉姆达
下一篇:無需迭代即可訪問Linq組元素
