我在Windows服务通知项目(.NET 4.0)中使用StringTemplate。我的目标是读入并处理定义查询和stringtemplate的XML文件。然后,该类将DataTable的结果绑定到模板中以进行电子邮件发送。下面是一个XML片段和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获取数据并将其绑定到我的stringtemplate?注意我目前正在使用LINQ,但解决方案不需要。
答案 0 :(得分:1)
我采用的方法不是投射到匿名类型和迭代集合的字符串模板文件中。我也以同样的方式处理单个记录“static”,但我在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$
}$