首页 > 解决方案 > 是否可以从 BIML 中的 GetTableSql() 中删除列

问题描述

我在 BIML 中经常使用 GetTableSql() 函数,但我经常需要在执行之前从该函数中删除一些列。这可能吗?

标签: biml

解决方案


您必须编写自己的扩展方法才能这样做。查看代码,您最好从方法调用的结果中清除列 - 这取决于您要执行的操作。

当前GetTableSql方法是一个扩展方法,它链接一个调用EmitTableScript,然后调用多个方法来构建返回的 SQL。至少在 BimlStudio 产品中,EmitTableScript 在 BimlExtensions.dll 中的Varigence.Biml.CoreLowerer.Capabilities.TableToPackageLowerer类中

经过更多思考,可能会更好,更少的支持头痛将是创建表节点的克隆,然后删除您不想要的列。

代码大约

var table0 = this.RootNode.Tables[0];
var tablePrime = table0;

// I don't have a biml project handy so this section is a guess
tablePrime.Columns.Clear();
// Might be AddRange if this method exists
// Remove all the columns that start with ignore, as an example of filtering columns
tablePrime.Columns.Add(table0.Columns.Where(x => !x.name.StartsWith("ignore"));

// end guess block    
var sql = tablePrime.GetTableSql();

推荐阅读