【问题标题】:replace text value with data dynamic based on column用基于列的动态数据替换文本值
【发布时间】:2017-02-17 09:29:39
【问题描述】:

我想用基于列名的数据库中的数据检索(DataSet)替换文本的值,例如:

SQL:

SELECT Fullname, Age FROM User

我有一条短信:

Hello my name is <<Fullname>> and my age is <<Age>>

结果:

Hello my name is Alvin and my age is 18

SQL:

SELECT Lastname, Feeling FROM User

我有一条短信:

Hello my name is <<Lastname>> and I am <<Feeling>>

结果:

Hello my name is Lee and I am Happy

【问题讨论】:

  • 查询数据,然后对字符串使用替换功能
  • 列名不同且动态
  • 请贴出你从数据库中检索数据的真实代码
  • 只要您不显示当前代码,此问题就与 C# 或任何其他与编程相关的问题无关。你具体在哪里卡住/你有困难吗?目前真的很难理解你实际上在问什么。始终回答以下问题以获得有关 StackOverflow 的帮助:您的意见是什么?你想要的输出是什么?你会得到什么?

标签: c# sql-server


【解决方案1】:

我最近使用的一个优秀的开源解决方案是dotliquid

请参阅此question,我详细说明了我为入门所做的工作,并查看 Tim 的出色回答

您可以执行查询、构建 POCO 并使用它来填充您的模板。您可以从任何地方读取模板文本 - 文件、数据库列、Web 服务等。

作为一个粗略的想法,你将如何去做:

public class PersonTemplateInfo : Drop
{
    public string Name { get; set; }
    public string Feeling { get; set; }
}

然后按如下方式使用:

// Code to read templateText here

Template.NamingConvention = new CSharpNamingConvention();
Template template = Template.Parse(templateText);

// Code to read values

PersonTemplateInfo personTemplateInfo = new PersonTemplateInfo
{
    Name = name,
    Feeling = feeling
};

string parsedText = template.Render(Hash.FromAnonymousObject(new {personTemplateInfo = personTemplateInfo }));

【讨论】:

  • 这只是一个评论而不是一个答案,不是吗?
  • 如果您无法定义要替换的内容怎么办。您只需将模板中的列名替换为列值即可。
  • 没错,你必须从一个已知点开始,所以阅读模板并对印记进行更改,然后替换。这对你有用吗?
【解决方案2】:

据我了解,下面的代码看起来像您需要的。我只是在这里直接输入,所以如果你觉得有用,你就明白了并纠正它。

   SqlCeDataAdapter da = new SqlCeDataAdapter();
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();

        da.SelectCommand = new SqlCommand(@"SELECT Fullname, Age,Lastname, Feeling,OtherProperties FROM User", connString);
        da.Fill(ds, "User");
        dt = ds.Tables["User"];

        var resultText = "Hello, ";
        var textDic = new Dictionary<string,string>(){
           {"Fullname","And My name is {0}"},
           {"Age","And My age is {0}"},
           {"LastName","And my name is {0}"},
           {"Felling","And I am  {0}"}, 
           {"OtherProperties","And whatever  {0}"}, 
         };

         foreach (DataRow row in dt.Rows)
        {
            foreach (DataColumn column in dt.Columns)
            {
                ColumnName = column.ColumnName;
                ColumnData = row[column].ToString();
                if(textDic.ContainsKey(ColumnName))
                {
                    resultText+= string.Format(textDic[ColumnName],ColumnData)
                }
            }
        }

// your final result is this resultText

【讨论】:

  • 如果您无法定义要替换的内容怎么办。您只需将模板中的列名替换为列值即可。
猜你喜欢
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
相关资源
最近更新 更多