使用Linq修改DataTable单元格值:房型/套餐费率场景实现咨询
嘿,我来帮你搞定这个用LINQ更新DataTable的需求,分步骤来很清晰:
1. 先规整房型费率参考数据
用强类型对象来存参考数据会让LINQ操作更顺手,当然你也可以直接用DataTable,这里先给你最直观的实现方式:
// 定义房型费率参考类 public class RoomRateReference { public int RoomNo { get; set; } public int MaxCapacity { get; set; } public decimal Amount { get; set; } } // 初始化你提供的参考数据 var roomRateReferences = new List<RoomRateReference> { new RoomRateReference { RoomNo = 101, MaxCapacity = 4, Amount = 1200 }, new RoomRateReference { RoomNo = 102, MaxCapacity = 4, Amount = 1200 }, new RoomRateReference { RoomNo = 201, MaxCapacity = 4, Amount = 1500 }, new RoomRateReference { RoomNo = 202, MaxCapacity = 5, Amount = 1700 } };
2. ComboBox选择事件中的LINQ更新逻辑
当用户选中「房型费率」时,我们用LINQ关联目标DataTable和参考数据,批量更新Amount字段:
// 假设你的目标DataTable叫targetDt,ComboBox控件叫cbRateType private void cbRateType_SelectedIndexChanged(object sender, EventArgs e) { if (cbRateType.SelectedItem.ToString() == "Room Rate(房型费率)") { // 用LINQ关联两个数据源,匹配房间号并获取对应的费率 var updatePairs = from targetRow in targetDt.AsEnumerable() join refRate in roomRateReferences on targetRow.Field<int>("RoomNo") equals refRate.RoomNo select new { TargetRow = targetRow, NewAmount = refRate.Amount }; // 遍历结果更新目标DataTable的Amount值 foreach (var pair in updatePairs) { pair.TargetRow.SetField("Amount", pair.NewAmount); } // 提交更改并刷新界面(比如绑定的DataGridView) targetDt.AcceptChanges(); dataGridView1.Refresh(); } else if (cbRateType.SelectedItem.ToString() == "Package Rate(套餐费率)") { // 这里处理套餐费率的逻辑,比如显示参数输入文本框,你可以后续补充细节 txtPackageParams.Visible = true; // ...其他套餐相关逻辑 } }
3. 补充适配场景
如果你的房型费率参考数据本来就存在另一个DataTable里,只需要把上面的roomRateReferences换成参考DataTable的枚举即可:
// 假设参考DataTable叫refRateDt var updatePairs = from targetRow in targetDt.AsEnumerable() join refRow in refRateDt.AsEnumerable() on targetRow.Field<int>("RoomNo") equals refRow.Field<int>("RoomNo") select new { TargetRow = targetRow, NewAmount = refRow.Field<decimal>("Amount") };
另外如果需要额外判断入住人数是否超过房型最大容量(可选需求),可以在LINQ里加Where条件过滤:
where targetRow.Field<int>("No. of Pax") <= refRate.MaxCapacity
内容的提问来源于stack exchange,提问作者Lady A
相关产品推荐
相关产品推荐

