using System.Collections.Generic;
public static void Main()
List<Activity> list = new List<Activity>();
list.Add(new Activity{Id = 1, Name = "xx"});
list.Add(new Activity{Id = 2, Name = "yy"});
list.Add(new Activity{Id = 3, Name = "zz"});
var listAsString = "2,,xx,yy,zz,aa";
var result = GetObjectListFromDelimitedString<Activity>(list, listAsString, "Name", ",");
foreach (var item in result)
Console.WriteLine($"{item.Id} - {item.Name}");
public static string[] GetStringListFromDelimitedString(string delimitedList, string delimiter = ",")
return delimitedList.Split(new string[]{delimiter}, StringSplitOptions.RemoveEmptyEntries);
public static IEnumerable<T> GetObjectListFromDelimitedString<T>(IEnumerable<T> list, string delimitedList, string propName, string delimiter)
var splitedList = GetStringListFromDelimitedString(delimitedList, delimiter);
return splitedList.Select(item =>
var propValue = obj.GetType().GetProperty(propName).GetValue(obj, null);
return item.Equals(propValue);
).Select(obj => (T)Convert.ChangeType(obj, typeof (T))).FirstOrDefault();
).Where(obj => obj != null);