将List <t>转换为另一个List </t>中所有对象的逗号分隔值列表

时间:2015-02-12 21:16:25

标签: c#

此问题与this答案非常相似,但我需要对List中的所有对象执行此操作,而不只是一个。

想想锻炼,你可以写:

  

卧推:135x10,185x10,225x8,275x5,315x3

     

哑铃出版社:65x12,85x12,95x10,100x8,100x8

也就是说,你有一个练习列表,每个练习都有一个集/代表列表。您希望,对于列表中的每个练习,将其集/列表列表转换为上面的表单。

这些课程如下:

public class Workout
{
    public int WorkoutId { get; set; }
    public string Name { get; set; }
    public List<Activity> Activities { get; set; }
    public DateTime Date { get; set; }
}

// Activity is an instance of an exercise,
// i.e., you bench press, dumbbell press, etc... all in one workout
public class Activity
{
    public int ActivityId { get; set; }
    public Exercise Exercise { get; set; }
    public List<Set> Sets { get; set; }
}

// Sets just hold Weight and Reps
public class Set
{
    public int SetId { get; set; }
    public int Weight { get; set; }
    public int Reps { get; set; }
}

因此,对于Set中的每个Activity,我想要set.Weight + "x" + set.Reps,而对于Activity中的每个Exercise,我想:

"the string we just got for set 1, the string we just got for set 2"

根据我之前提到的答案,我想出了这个:

string.Join(",", 
     workout.Activities.Select(
         activity => activity.Sets.Select(
             set => set.Weight.ToString() + "x" + set.Reps.ToString()
         )
     ));

但是这会产生:

  

System.Linq.Enumerable + WhereSelectListIterator 2[MyLifts.Models.Set,System.String],System.Linq.Enumerable+WhereSelectListIterator 2 [MyLifts.Models.Set,System.String],System.Linq.Enumerable + WhereSelectListIterator 2[MyLifts.Models.Set,System.String],System.Linq.Enumerable+WhereSelectListIterator 2 [MyLifts.Models.Set,系统。字符串],System.Linq.Enumerable + WhereSelectListIterator`2 [MyLifts.Models.Set,System.String]

1 个答案:

答案 0 :(得分:4)

您有嵌套选择,内部选择会返回您可以加入的IEnumerable<String>,但外部选择会返回IEnumerable<IEnumerable<String>>

锻炼和锻炼是一样的吗?假设他们正在尝试:

string.Join(",", 
 workout.Activities.Select(
     activity => activity.Exercise.Name + ": " + String.Join(",", 
         activity.Sets.Select(
              set => set.Weight.ToString() + "x" + set.Reps.ToString()
         )
     )
 ));