Самый быстрый способ запятой отделить многозначное поле Tridion
Каким будет самый быстрый способ разделить многозначное текстовое поле Tridion на строку, разделенную запятой?
В моем случае я использую С#, но, я думаю, любые другие примеры также приветствуются.
Это уродливый и долгий путь:
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
Ответы
Ответ 1
Пользователь 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))
Ответ 2
Вы не указали свою версию Tridion или .Net в своем вопросе, но есть несколько разных методов, которые вы могли бы использовать для получения значений, разделенных запятыми, из текстового поля.
Если вы используете .Net 4, я думаю, вы могли бы просто сделать:
string.Join(",", multiTextField.Values);
пока multiTextField.Values
реализует IList.
Если вы используете .Net 3.5 или ранее, я считаю, что для функции string.Join()
требуется массив, а не IList
.
Было довольно хорошее обсуждение вариантов здесь String Join в списке (.Net 4)
или здесь Попытка string.Join IList (.Net 4)
или здесь Создание списка с разделителями-запятыми из IList (.Net 3.5)
Ответ 3
Оцените выражение. Многозначное текстовое поле уже является разделенной запятой строкой "под водой", поэтому вы можете просто захватить ее в слое Dreamweaver следующим образом:
@@(Component.multiValueField)@@
Ответ 4
Вы пробовали multiTextField.Values.ToArray().Join(",")
?