【问题标题】:Quickest way to comma separate a Tridion multivalue field用逗号分隔 Tridion 多值字段的最快方法
【发布时间】: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 的更新-尝试我在答案中添加的链接 (stackoverflow.com/questions/799446/…) 接受的答案涉及在执行联接之前将 IList 转换为数组。

标签: .net-3.5 tridion tridion2009


【解决方案1】:

你试过multiTextField.Values.ToArray().Join(",")吗?

【讨论】:

  • 对不起@peter-kjaer,ToArray 方法是您必须首先创建的 LINQ 方法。至少在这个链接中是这样的:stackoverflow.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 中计算表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 2013-05-13
  • 1970-01-01
  • 2019-02-27
  • 2013-06-21
相关资源
最近更新 更多