用逗号分隔 Tridion 多值字段的最快方法
Posted
技术标签:
【中文标题】用逗号分隔 Tridion 多值字段的最快方法【英文标题】:Quickest way to comma separate a Tridion multivalue field 【发布时间】:2012-05-22 22:41:08 【问题描述】:将多值 Tridion 文本字段拆分为逗号分隔字符串的最快方法是什么? 就我而言,我使用的是 C#,但我想也欢迎任何其他示例。 这似乎是丑陋而漫长的道路:
var multiTextField = fields["multiTextField"] as TextField;
string multiCommaField = String.Empty;
for (int i = 0; i < multiTextField.Values.Count; i++)
multiCommaField += multiTextField.Values[i].ToString() + ",";
编辑:我正在使用 .NET 3.5 和 Tridion 2009 SP1
【问题讨论】:
执行时间最快的方式,或最少的代码量 感谢@Hendrik 的更新-尝试我在答案中添加的链接 (***.com/questions/799446/…) 接受的答案涉及在执行联接之前将 IList 转换为数组。 【参考方案1】:你试过multiTextField.Values.ToArray().Join(",")
吗?
【讨论】:
对不起@peter-kjaer,ToArray 方法是您必须首先创建的 LINQ 方法。至少在这个链接中是这样的:***.com/questions/799446/… 我在官方文档中看到过,但没有时间实际试用。我的第一个想法是“加入”,所以我只是浏览了文档中的属性并发布了一个建议。【参考方案2】:您可以使用 LINQ:
var multiTextField = fields["multiTextField"] as TextField;
string delimeter = ",";
Console.WriteLine(multiTextField.Values.Aggregate((i, j) => i + delimeter + j))
或者用更短(更丑)的方式:
((TextField) fields["multiTextField"]).Values.Aggregate((i, j) => i + "," + j))
【讨论】:
此方法最短,似乎也更快。谢谢!【参考方案3】:您尚未在问题中指定您的 Tridion 或 .Net 版本,但您可以使用几种不同的技术从文本字段中获取逗号分隔值。
如果您使用的是 .Net 4,我相信您可以这样做:
string.Join(",", multiTextField.Values);
只要 multiTextField.Values
实现 IList。
如果您使用.Net 3.5 或更早版本,我相信string.Join()
函数需要一个数组而不是IList
。
在String Join on a List (.Net 4) 或Trying to string.Join an IList (.Net 4) 或Creating a comma separated list from IList (.Net 3.5)
进行了很好的讨论【讨论】:
不幸的是,在 3.5 中,漂亮而干净的 .NET 4 方法尚不可用。我检查了其他链接,但那里的解决方案不会使脚本变得更小。 user978511 的回答简短而迅速。 很公平 - 很高兴它对你有用。与稍长的方法相比,我发现对于简单的事情 LINQ 可能很难阅读和支持,但如果有性能改进,那么我会同意你接受的答案。【参考方案4】:评估表达式。多值文本字段已经是一个逗号分隔的字符串“under the water”,因此您可以像这样在 Dreamweaver 层中抓取它:
@@(Component.multiValueField)@@
【讨论】:
对于 Dreamweaver 模板,请记住这一点!谢谢多米尼克 您还可以在程序集 TBB 中计算表达式。以上是关于用逗号分隔 Tridion 多值字段的最快方法的主要内容,如果未能解决你的问题,请参考以下文章