Подтвердить что ты не робот

Самый быстрый способ запятой отделить многозначное поле 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

4b9b3361

Ответ 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(",")?