C# 如何使用一个集合的数值填充另一个空的对象集合
问题核心原因
你的foreach循环遍历的是刚实例化的空Collection<Billing>对象,没有可遍历的元素自然不会进入循环执行赋值逻辑,同时你对order集合调用Select()的用法也不正确,Select()返回的是集合序列,不能直接转为int或字符串赋值给单个字段。
正确实现方案
默认场景为每个Order对象对应映射为一个Billing对象,修正后代码如下:
public async Task<Collection<Billing>> MapOrderToBilling(Collection<Order> order) { Collection<Billing> items = new Collection<Billing>(); // 遍历入参的Order集合,而非空的Billing集合 foreach (var orderItem in order) { // 每个Order对应创建一个新的Billing对象 Billing billingItem = new Billing(); billingItem.adjustment = 10; billingItem.balance_ins = Convert.ToInt32(orderItem.Balance); billingItem.balance_total = orderItem.TotalBalance.ToString(); // 其余字段赋值逻辑 // 赋值完成后加入返回集合 items.Add(billingItem); } // 若方法无实际异步操作,可删除async关键字,返回类型改为Collection<Billing>即可 // 如果必须保留async声明,可增加await Task.CompletedTask;避免编译警告 return items; }
如果你实际需求是把整个Order集合的统计值汇总到单个Billing对象中,不需要循环,直接按如下逻辑实现:
public async Task<Collection<Billing>> MapOrderToBilling(Collection<Order> order) { Collection<Billing> items = new Collection<Billing>(); Billing billingItem = new Billing(); billingItem.adjustment = 10; // 示例:取所有Order的Balance总和赋值 billingItem.balance_ins = order.Sum(o => Convert.ToInt32(o.Balance)); // 示例:取所有Order的TotalBalance总和转字符串 billingItem.balance_total = order.Sum(o => o.TotalBalance).ToString(); // 其余字段赋值逻辑 items.Add(billingItem); return items; }
关键修正点
- 遍历对象改为入参的
order集合,每个Order元素对应生成一个Billing对象 - 每次循环手动实例化
Billing对象,完成字段赋值后调用Add()方法加入返回集合 - 直接取当前遍历到的
Order元素的属性赋值,不要对整个order集合调用Select()做无意义的序列查询
内容的提问来源于stack exchange,提问作者Alma
相关产品推荐
相关产品推荐

