到目前为止,我已经完成了
foreach (DataRow myRow in targetTable.Rows)
{
htmlBuilder.Append("<tr align='left' valign='top'>");
foreach (DataColumn targetColumn in targetTable.Columns)
{
htmlBuilder.Append("<td align='left' valign='top'>");
htmlBuilder.Append(myRow[targetColumn.ColumnName].ToString());
htmlBuilder.Append("</td>");
}
htmlBuilder.Append("</tr>");
}
任何更好的方式......如Linq / Lambda方法
由于
答案 0 :(得分:1)
LINQ通常用于选择和操作集合的子集,您正在做的事情并不真正符合其目的。
如果你真的想要,你可以将你的foreach循环定义为lambdas,但是你不会得到任何特殊的好处。即:
Action<DataColumn> buildAction = (DataColumn targetColumn) =>
{
htmlBuilder.Append("<td align='left' valign='top'>");
htmlBuilder.Append(myRow[targetColumn.ColumnName].ToString());
htmlBuilder.Append("</td>");
};
targetTable.Columns.ForEach(buildAction);
答案 1 :(得分:1)
我不建议使用以下内容,因为您的代码效率更高。但是,既然您正在寻找一个可以学习的示例......您可以使用以下LINQ语句来实现相同的结果。
var sb = new StringBuilder();
const string ROWBEGIN = "<tr align='left' valign='top'>";
const string ROWEND = "</tr>";
const string CELLBEGIN = "<td align='left' valign='top'>";
const string CELLEND = "</td>";
targetTable.AsEnumerable()
.Select(row => string.Format("{0}{1}{2}",
ROWBEGIN,
string.Join(string.Empty,
row.Table.Columns
.Cast<DataColumn>()
.Select(column => string.Format("{0}{1}{2}",
CELLBEGIN,
(row.IsNull(column) ? string.Empty : row[column].ToString()),
CELLEND))
.ToArray()
),
ROWEND)
)
.ToList()
.ForEach(y => sb.Append(y));
答案 2 :(得分:1)
不要将其视为字符串,而应考虑使用LINQ to XML生成节点:
var rows = from row in targetTable.Rows.AsEnumerable()
select new XElement("tr",
new XAttribute("align", "left"),
new XAttribute("valign","top"),
from column in targetTable.Columns.AsEnumerable()
select new XElement("td",
new XAttribute("align", "left"),
new XAttribute("valign", "top"),
myRow[targetColumn.ColumnName].ToString()
)
);
将其翻译成Lambda语法:
var rows = targetTable.Rows.AsEnumerable().Select(row => new XElement("tr",
new XAttribute("align", "left"),
new XAttribute("valign","top"),
targetTable.Columns.AsEnumerable().Select(column => new XElement("td",
new XAttribute("align", "left"),
new XAttribute("valign", "top"),
myRow[targetColumn.ColumnName].ToString()
))
));
如果您需要将结果作为字符串。只需在行上调用ToString()即可。
将XML视为使用字符串构建器的主要优点之一是,您将正确地转义无效字符串,例如&lt;&gt;&amp;“并确保有效的XHtml结果。