【问题标题】:Two List properties, unable to to create a list using LINQ两个列表属性,无法使用 LINQ 创建列表
【发布时间】:2018-08-11 06:26:27
【问题描述】:

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

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

并创建一个 list(),其中它是一个 TraineeID、一个 MealID 和一个 Day。我设法使用 MealID 列表(如下)来做到这一点,但是当我添加 Day 列表时,我不确定该怎么做。有什么想法吗?

AddAssignMealView mealtraiDeserializeObject = JsonConvert.DeserializeObject<AddAssignMealView>(mealTrainee);

                meals = mealtraiDeserializeObject.MealID.Select(x => new MealTrainee()
                {
                    TraineeID = mealtraiDeserializeObject.TraineeID,
                    MealID = x
                }).ToList();

【问题讨论】:

  • MealIDDay 的长度是否始终相同? MealTrainee是什么类型的?
  • 是的,它们的长度总是相同的。 MealIDDay 相关联。例如:星期一:炸玉米饼(MealID of 20)。
  • 顺便说一句,MealIDsDays 不是更好吗?

标签: c# asp.net linq asp.net-web-api entity-framework-6


【解决方案1】:

您可以使用Enumerable.Zip 函数将两个Lists 组合起来:

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();

【讨论】:

  • 抛出错误提示“Value cannot be null. Parameter name: second”
  • 听起来你的Day 没有任何值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多