我们正在构建一个查询服务,需要解析用户的搜索词,并从中生成一种SQL形式(不是T-SQL,而是一种专有的类似SQL的查询语言)。 为了生成SQL,我们正在研究T4模板。
我在Creating T4 templates at runtime (build-time)处查看了另一个问题,我理解了基本的想法;但是我们需要的是不是物理文件输出,而是包含最终SQL语句的简单内存字符串。 这可能吗?
我遇到的第二个问题,几乎更重要:考虑到在T4模板文件中生成SQL所需的相当复杂的逻辑,这个T4的速度有多快。 感谢。
答案 0 :(得分:2)
我认为你想看看预处理模板(又名运行时模板)。您可以使用模板Preprocess Text Template在Visual Studio 2010中创建它们。
我创建了这个非常简单的模板(我把它命名为MyTemplate.tt):
<#@ template language="C#"#>
<#
for (var iter = 0; iter < HowManyCommentsToGenerate; ++iter)
{
#>
// <#=iter#>
<#
}
#>
我添加了这个使用HowManyCommentsToGenerate字段扩展生成的类的partial类:
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());
}
}
到目前为止,我真的没有足够的运行时模板经验来为您提供建议。我建议阅读生成的代码并对其进行分析。