Есть ли способ конвертировать коллекцию объектов в один новый объект с помощью LINQ?
Я хочу использовать это в другом выражении LINQ to SQL.
Есть ли способ конвертировать коллекцию объектов в один новый объект с помощью LINQ?
Я хочу использовать это в другом выражении LINQ to SQL.
Почему бы вам не использовать string.Join
?
string.Join("<br/>", collection.Select(e => e.TextProp).ToArray());
Вы можете использовать метод Aggregate...
var myResults = (from myString in MyStrings
select myString)
.Aggregate(string.Empty, (results, nextString)
=> string.Format("{0}<br />{1}", results, nextString));
или
var myResults = MyStrings.Aggregate(string.Empty, (results, nextString)
=> string.Format("{0}<br />{1}", results, nextString));
Обычным способом было бы использовать один из операторов агрегации (Aggregate
, Sum
, Average
и т.д.), но он полностью зависит от типа и того, что вы хотите сделать. Какой тип вас интересует?
EDIT: Хорошо, так что вы хотите объединить строки... Я не думаю, что что-то будет в LINQ to SQL. Параметры:
Большинство решений здесь довольно неэффективны, если у вас есть большое количество значений, которые вы хотите контактировать. Кроме того, они не все настолько читаемы. Если вы собираетесь делать такие вещи часто, то стоит создать свой собственный метод расширения, чтобы сделать это. Нижеприведенная реализация позволяет сделать эквивалент string.Join(", ", arrayOfStrings)
, где arrayOfStrings может быть IEnumerable<T>
, а разделителем может быть любой объект вообще. Это позволяет вам сделать что-то вроде этого:
var names = new [] { "Fred", "Barney", "Wilma", "Betty" };
var list = names
.Where(n => n.Contains("e"))
.Join(", ");
Мне нравятся две вещи:
public static string Join<TItem,TSep>(
this IEnumerable<TItem> enuml,
TSep separator)
{
if (null == enuml) return string.Empty;
var sb = new StringBuilder();
using (var enumr = enuml.GetEnumerator())
{
if (null != enumr && enumr.MoveNext())
{
sb.Append(enumr.Current);
while (enumr.MoveNext())
{
sb.Append(separator).Append(enumr.Current);
}
}
}
return sb.ToString();
}