代码之家  ›  专栏  ›  技术社区  ›  Jon Wisniewski

两个列表属性,无法使用LINQ创建列表

  •  1
  • Jon Wisniewski  · 技术社区  · 7 年前

    我不确定如何在类中通过两个列表属性进行选择,如:

    public class AddAssignMealView
    {
        public int TraineeID { get; set; }
        public List<int> MealID { get; set; }
        public List<string> Day { get; set; }
    }
    

    并创建一个列表(),其中包含一个实习生ID、一个MealID和一天。我设法用MealID列表(如下)完成了这项工作,但当我添加了日期列表时,我不确定该做什么。有什么想法吗?

    AddAssignMealView mealtraiDeserializeObject = JsonConvert.DeserializeObject<AddAssignMealView>(mealTrainee);
    
                    meals = mealtraiDeserializeObject.MealID.Select(x => new MealTrainee()
                    {
                        TraineeID = mealtraiDeserializeObject.TraineeID,
                        MealID = x
                    }).ToList();
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   NetMage    7 年前

    您可以使用 Enumerable.Zip 组合两个的函数 List s:

    var ans = mealtraiDeserializeObject.MealID.Zip(mealtraiDeserializeObject.Day, (m, d) => new {
        mealtraiDeserializeObject.TraineeID,
        MealID = m,
        Day = d
    }).ToList();
    

    您还可以使用(很少提及)的双参数版本 Enumerable.Select ,但我不认为效率的微小提高值得(IMO)可读性的降低:

    var ans = mealtraiDeserializeObject.MealID.Select((m, i) => new {
        mealtraiDeserializeObject.TraineeID,
        MealID = m,
        Day = mealtraiDeserializeObject.Day[i]
    }).ToList();