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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个List属性,无法使用LINQ创建列表相关的知识,希望对你有一定的参考价值。

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

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

并创建一个list(),其中包含一个TraineeID,一个MealID和一天。我设法用MealID列表(下面)来做,但是当我添加Day列表时,我不确定该做什么。有任何想法吗?

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

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

您可以使用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();

以上是关于两个List属性,无法使用LINQ创建列表的主要内容,如果未能解决你的问题,请参考以下文章

比较两个列表并使用 linq 返回不匹配的项目

如何使用LINQ C#将一些属性的值从一个列表更改为另一个列表:

LINQ Group使用Lambda通过两个对象属性和SUM,AVG或忽略其他对象属性

使用 LINQ 获取两个比较列表的结果并根据结果更改列表中的属性

左连接两个列表并使用 Linq 从右侧维护一个属性

使用 linq 返回对象的特定属性列表