You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 22:36:03