Как преобразовать список <T> в список, разделенный запятыми, используя свойство класса Id как значение
У меня есть коллекция List<User>
, и я хочу создать разделенную запятую строку с использованием свойства User.Id, поэтому:
"12321,432434,123432452,1324234"
Я сделал это, используя цикл, но надеялся, что кто-то сможет показать мне способ linq?
Ответы
Ответ 1
В .NET 4:
string joined = string.Join(",", list.Select(x => x.Id));
В .NET 3.5:
string joined = string.Join(",", list.Select(x => x.Id.ToString()).ToArray());
Разница в том, что список перегрузки .NET 4 для string.Join
шире, чем тот, что в .NET 3.5 и перегрузка, которую вы действительно хотите, является одним из "новых":
public static string Join<T>(string separator, IEnumerable<T> values)
Вы все еще можете сделать это в .NET 2.0, просто используя List<T>
-специфический метод вместо LINQ (я предполагаю, что вы все еще можете использовать С# 3):
string joined = string.Join(",", list.ConvertAll(x => x.Id.ToString())
.ToArray());
Ответ 2
Учитывая этот список:
List<User> users = (GetUsers() ?? new List<User>())
.Where(u => u != null).ToList();
// no more nulls
.NET 3.5 - String.Join
Присоединиться (String, String())
Присоединиться (String, String(), Int32, Int32)
Пример:
return string.Join(",", users.Select(u => u.Id.ToString()).ToArray());
.NET 4.0 - String.Join
Присоединиться (String, IEnumerable (Of String))
Join (Of T) (String, IEnumerable (Of T))
Присоединиться (String, Object())//действительно? Просто присоединяйтесь к "вещам"?
Присоединиться (String, String())
Присоединиться (String, String(), Int32, Int32)
Пример
return string.Join(",", users.Select(u => u.Id));
Ответ 3
использовать
string myResult = string.Join (",", (from l in myList select l.ID.ToString()).ToArray());
Ответ 4
string.Join( ",", list.Select( item => item.ID ).ToArray() );