此问题与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 + WhereSelectListIterator2[MyLifts.Models.Set,System.String],System.Linq.Enumerable+WhereSelectListIterator
2 [MyLifts.Models.Set,系统。字符串],System.Linq.Enumerable + WhereSelectListIterator`2 [MyLifts.Models.Set,System.String]
答案 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()
)
)
));