gpt4 book ai didi

c# - 操作集合以生成压缩版本

转载 作者:行者123 更新时间:2023-12-02 05:14:31 25 4
gpt4 key购买 nike

我目前对一小块我似乎无法弄清楚的功能感到困惑。

首先我有一个 Stock如下所示的类:

public class Stock
{
public int Id;
public int LocationId;
public int Quantity;
}

Stock日志是从数据库返回的,这些数据库是从另一个功能产生的。日志表示为 List<Stock>集合 - 但是我需要添加 Quantity相同的每个对象的属性 IDLocationID组合,例如:

Original Data Set:

ID: 1 Location: 1 Quantity: 20

ID: 1 Location: 2 Quantity: 30

ID: 1 Location: 1 Quantity: 30

ID: 2 Location: 2 Quantity: 20

ID: 1 Location: 2 Quantity: 30

ID: 1 Location: 1 Quantity: 100

应该返回:

Condensed Data Set:

ID: 1 Location: 1 Quantity: 150

ID: 1 Location: 2 Quantity: 60

ID: 2 Location: 2 Quantity: 20

重申一下:数据集是从数据库动态返回的,不能保证每ID都会有& LocationID组合,我需要结果数据集在 ID 的复合键上是唯一的和 LocationID .

不确定解决此问题的最有效方法并且它阻碍了我的项目进展,任何建议或方法将不胜感激。我有点认为这确实是一个知识差距,但我一直无法找到任何合适/符合我要求的内容(我想这是一个很奇怪的要求)。

非常感谢,

安迪

最佳答案

最好在数据库上执行此操作,但您也可以使用 GroupBy 来实现完全相同的效果:

public class Stock
{
public int Id;
public int LocationId;
public int Quantity;
}

static void Main(string[] args)
{
var list = new List<Stock>()
{
new Stock(){ Id = 1, LocationId = 1, Quantity = 20},
new Stock(){ Id = 1, LocationId = 2, Quantity = 30},
new Stock(){ Id = 1, LocationId = 1, Quantity = 30},
new Stock(){ Id = 2, LocationId = 2, Quantity = 20},
new Stock(){ Id = 1, LocationId = 2, Quantity = 30},
new Stock(){ Id = 1, LocationId = 1, Quantity = 100},

};

var grouped = list.GroupBy(c => new {Id = c.Id, LocationId = c.LocationId})
.Select(g => new
{
Id = g.Key.Id,
LocationId = g.Key.LocationId,
Quantity = g.Sum(a => a.Quantity)
});
foreach(var group in grouped.OrderBy(c => c.Id))
{
Console.WriteLine("Id:{0} - LocationId:{1} - Quantity:{2}", group.Id,
group.LocationId, group.Quantity);
}
}

关于c# - 操作集合以生成压缩版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14859903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com