我们正在构建一个查询服务,它需要解析用户的搜索词,并从中生成一种SQL形式(不是T-SQL,而是一种专有的类似SQL的查询语言)。为了生成SQL,我们正在查看T4模板。
我在运行时(构建时)创建T4模板时查看了另一个问题,我理解基本思想;然而,我们需要的是不是物理文件输出,而是一个包含最终SQL语句的简单内存字符串。这可能吗?
我有第二个问题,这几乎更重要:当考虑到我们需要在T4模板文件中生成SQL的相当复杂的逻辑时,这个T4的东西有多快。谢谢。
我认为你想看看预处理模板(又名运行时模板)。您可以在visual studio 2010中使用模板预处理文本模板创建它们。
我创建了这个非常简单的模板(我把它命名为MyTemplate.tt):
<#@ template language="C#"#>
<#
for (var iter = 0; iter < HowManyCommentsToGenerate; ++iter)
{
#>
// <#=iter#>
<#
}
#>
我添加了这个部分类,它扩展了HowManyCommentsToGenerate字段生成的类:
partial class MyTemplate
{
int HowManyCommentsToGenerate;
public MyTemplate (int count)
{
HowManyCommentsToGenerate = count;
}
}
最后我这样使用它(注意输出是字符串而不是文件):
class Program
{
static void Main(string[] args)
{
var str = new MyTemplate(32);
Console.Write(str.TransformText());
}
}
就性能而言,老实说我没有足够的运行时模板经验来建议您。我建议阅读生成的代码并对其进行分析。