如何将C#方法返回的金额列表值替换到带占位符的消息文本模板中
实现步骤
1. 明确占位符与字段映射
首先确认你模板里的占位符和outputList1类字段的对应关系,参考如下(可根据实际需求调整):
{0}:收件人姓名(生成专属消息时传入的人员标识){1}:Draft总金额 → 对应outputList1.DraftAmount{2}:prm金额 → 对应outputList1.PrmSales{3}:昨日金额 → 可选择outputList1.YesterdaySalesPrm或outputList1.YesterdayDraftAmount,示例用前者
2. 基础替换实现
你用的是C#标准复合格式字符串模板,直接用内置的string.Format方法即可完成替换,示例代码:
// 定义固定消息模板 const string MessageTemplate = @"Dear {0} Hi, the total amount of Draft is {1}. amount of prm is {2} yesterday amount is {3}"; // 调用你已实现的方法获取金额列表 var amountDataList = listAmount(); // 筛选目标日期的金额数据,示例取最新日期的统计值 var targetAmount = amountDataList.OrderByDescending(x => x.FromDate).FirstOrDefault(); if (targetAmount != null) { // 替换占位符生成最终消息,示例收件人为"张三" string resultMsg = string.Format(MessageTemplate, "张三", targetAmount.DraftAmount, targetAmount.PrmSales, targetAmount.YesterdaySalesPrm); // 后续可直接使用resultMsg完成发送、存储等操作 }
3. 批量生成多人专属消息的优化
如果需要给所有人员批量生成消息,你需要调整现有listAmount方法的分组逻辑,加上人员维度:
首先给outputList1类新增人员姓名字段:
public class outputList1 { // 原有字段保留,新增下面字段 public string StaffName { get; set; } public DateTime FromDate { get; set; } public decimal YesterdaySalesPrm { get; set; } public decimal YesterdayDraftAmount { get; set; } public decimal PrmSales { get; set; } public decimal DraftAmount { get; set; } }
修改listAmount的分组条件:
public List<outputList1> listAmount() { var amounts = (from p in db.FactTotalAmount // 按日期+人员分组,拿到每个人的每日金额统计 group p by new { p.FromDate, p.StaffName } into g select new outputList1 { StaffName = g.Key.StaffName, FromDate = g.Key.FromDate, YesterdaySalesPrm = g.Sum(x => x.YesterdaySalesPrm), YesterdayDraftAmount = g.Sum(x => x.YesterdayDraftAmount), PrmSales = g.Sum(x => x.PrmSales), DraftAmount = g.Sum(x => x.DraftAmount) }).ToList(); return amounts; }
遍历生成所有人员的专属消息:
var allAmountData = listAmount(); // 筛选你需要的统计日期,比如昨天的数据 var targetDate = DateTime.Now.AddDays(-1).Date; var dailyPersonAmount = allAmountData.Where(x => x.FromDate.Date == targetDate).ToList(); foreach (var personAmount in dailyPersonAmount) { string personMsg = string.Format(MessageTemplate, personAmount.StaffName, personAmount.DraftAmount, personAmount.PrmSales, personAmount.YesterdaySalesPrm); // 处理单个人的消息 }
补充说明
如果需要对金额做格式化展示,比如保留2位小数、加千分位,直接修改模板占位符即可,比如将{1}改为{1:N2},生成的金额会自动格式化为1,234.56的样式。
内容的提问来源于stack exchange,提问作者fahime abouhamze
相关产品推荐
相关产品推荐

