gpt4 book ai didi

c# - 使用 StringTemplate 输出 DataTable

转载 作者:行者123 更新时间:2023-11-30 18:01:48 26 4
gpt4 key购买 nike

我正在尝试实现一种方法,该方法将接受带有 StringTemplateDataTable 并返回数据的字符串表示形式。

我找到了如何做到这一点 herehere ,但这对我不起作用。

示例代码:

// Here can be any table with any number of columns.
var table = new DataTable();
table.Columns.Add("StrCol", typeof(string));
table.Columns.Add("IntCol", typeof(int));
table.Rows.Add(new object[] { "Row1String", 1 });
table.Rows.Add(new object[] { "Row2String", 2 });

var data = from dataRow in table.AsEnumerable()
select dataRow;

var st = new StringTemplate("$items:{$it.StrCol$ $it.IntCol$}$");
st.SetAttribute("items", data);
Console.Write(st.ToString());

结果:

Class DataRow has no such attribute: StrCol in template context [anonymous anonymous]
Class DataRow has no such attribute: IntCol in template context [anonymous anonymous]
Class DataRow has no such attribute: StrCol in template context [anonymous anonymous]
Class DataRow has no such attribute: IntCol in template context [anonymous anonymous]

更新:

我必须使用 Antlr3.StringTemplate.dll 版本 3.1.0StringTemplate。我决定尝试另一个版本并下载 Antlr3.StringTemplate.dll 3.3.0 版本。一切正常。那么,有什么方法可以使用旧库在 DataTable 上应用模板吗?

最佳答案

DataTable 上使用字符串模板的可能解决方法是将行转换为字典集合,这样就可以按列名访问行单元格:

var columns = table.Columns.Cast<DataColumn>().Select(col => col.ColumnName);
var data = from DataRow row in table.Rows
select columns.ToDictionary(col => col, col => row[col]);

var st = new StringTemplate("$items:{$it.StrCol$ $it.IntCol$\n}$");
st.SetAttribute("items", data);

使用更新版本的 StringTemplate 库与 DataTable 一起工作:

var st = new StringTemplate("$items:{$it.StrCol$ $it.IntCol$\n}$");
st.SetAttribute("items", table.Rows);

关于c# - 使用 StringTemplate 输出 DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8713741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com