【问题标题】:Dynamically Map a DataSet to StringTemplate将数据集动态映射到 StringTemplate
【发布时间】:2011-03-06 13:35:29
【问题描述】:

我在 Windows 服务通知项目 (.NET 4.0) 中使用 StringTemplate。我的目标是读入和处理定义查询和字符串模板的 XML 文件。然后,该类将 DataTable 中的结果绑定到电子邮件模板中。下面是一个 XML sn-p 和 LINQ 语句以及用于绑定的 C#。

<!-- XML Data Original-->
<Items>
  <Item>
    <Query>
       Select name, title, date from People;
    </Query>
    <Template>
        Welcome $name to $title$ on $date$.
    </Template>
  </Item>
</Items>

 var dataTable = database.GetQuery(query);
 var data = (from dataRow in dataTable.AsEnumerable()
            select new
            {
               Name = dataRow.Field<string>("Name"),
               Title = dataRow.Field<string>("Title"),
               Date = dataRow.Field<DateTime>("Date")
            }).Distinct();
  stringTemplate.SetAttribute("Name", data.Name);
  stringTemplate.SetAttribute("Title", data.Title);
  stringTemplate.SetAttribute("Date", data.Date);

问题是上面的C#是静态的,我想把它变成动态的。那如果我需要在 XML 查询元素中添加另一个字段和对应的模板字段怎么办?

<!-- XML Data Modified-->
<Items>
  <Item>
    <Query>
       Select name, title, date, location from People;
    </Query>
    <Template>
        Welcome $name to $title$ on $date$ at $location$.
    </Template>
  </Item>
</Items>

DataTable 包含新列,但我的 LINQ 语句和绑定代码不包含。我的问题是我可以采用什么策略来动态地从 DataTable 获取数据并将其绑定到我的字符串模板?注意我目前正在使用 LINQ,但解决方案不是必须的。

【问题讨论】:

    标签: c# xml linq datatable stringtemplate


    【解决方案1】:

    我采用的方法不是投影到匿名类型中,而是在字符串模板文件中迭代集合。我也以相同的方式处理单个记录“静态”,但我在 Linq 语句上使用了 FirstOrDefault 过滤器。

    C#:

    var dataTable = database.GetQuery(query);
    var data = (from dataRow in dataTable.AsEnumerable()
                select dataRow);
    stringTemplate.SetAttribute("dynamic", data);
    

    模板:

    $dynamic:{ d |
    Welcome $d.name$ to $d.title$ on $d.date$ at $d.location$
    }$
    

    【讨论】:

    • 在您的答案中的模板中;您没有问题中的其余 xml。在您的实际模板中;那个 xml 还在那里,还是你使用字符串模板来生成消息,然后使用 dom 操作手动将它们插入到你的 xml 中......或类似的东西?
    猜你喜欢
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 2016-03-02
    • 2022-01-20
    • 2018-10-07
    相关资源
    最近更新 更多