【问题标题】:How to destruct a List element that contains three lists, so I can create a list to add to database如何破坏包含三个列表的 List 元素,以便我可以创建一个列表以添加到数据库
【发布时间】:2018-03-05 06:46:14
【问题描述】:

进入 webAPI 的是这个 JSON 字符串,并被反序列化为:

List<AddAssignMealView> mealtraiDeserializeObjects = JsonConvert.DeserializeObject<List<AddAssignMealView>>(mealTrainee);

mealtraiDeserializeObjects 包含一周中每一天的五个索引之一。在该特定索引内部是一个如下所示的类:

public class AddAssignMealView
{
    public int TraineeID { get; set; }
    public string DayOfTheWeek { get; set; }
    public List<string> MealTypes { get; set; }
    public List<int> MealID { get; set; }
    public List<string> MealName { get; set; }
}

我想做的是,能够创建MealTrainee(Entity Framework) 的列表:

 public partial class MealTrainee
{
    public int MealTraineeID { get; set; } //Ignore this one due to it being a post
    public int MealID { get; set; }
    public int TraineeID { get; set; }
    public string DayOfTheWeek { get; set; }
    public string MealType { get; set; }
    public string MealName { get; set; }

    public virtual Meal Meal { get; set; }
}

所以我可以使用 addrange 并将列表添加到数据库中。如果它是单个元素,我了解如何使用 zip 并将两种列表类型组合在一起。这是不同的,因为它是一个包含五个元素的列表,而这五个元素中的每一个都包含三个列表。如果有人能指出我正确的方向,那将很有帮助。

【问题讨论】:

  • AddAssignMealView 的 MealTypes、MealID 和 MealName 列表包含相同的计数?

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


【解决方案1】:

您可以Zip 2 次将 3 个列表中的值组合成一系列元组。您可以使用SelectMany 来展平结果。例如:

var result = mealtraiDeserializeObjects.SelectMany(c =>
    c.MealID.Zip(c.MealName, (id,name) => new {id, name})
    .Zip(c.MealTypes, (prev, type) => new {prev.id, prev.name, type})
    .Select(r => new MealTrainee
    {
        TraineeID = c.TraineeID,
        DayOfTheWeek = c.DayOfTheWeek,
        MealID = r.id,
        MealName = r.name,
        MealType = r.type,
    }));

【讨论】:

    【解决方案2】:

    这是我找到的解决方案。我每天都在第一次迭代是星期一,然后是用餐次数(例如:早餐用餐,午餐用餐)并将它们计入“用餐周”的计数中。然后我参加了mealweek,并为每个计数创建了一个新的mealtrainee。然后,在我用 mealtrainee 做饭后,我把它放在 db.MealTrainees.AddRange 中并发布了所有记录。

        [ResponseType(typeof(MealTrainee))]
        public IHttpActionResult PostMealTrainee([FromBody] string mealTrainee)
        {
            List<MealTrainee> meals = new List<MealTrainee>();
    
            using (DbContextTransaction dbContextTransaction = db.Database.BeginTransaction())
            {
                try
                {
                    List<AddAssignMealView> mealtraiDeserializeObjects = JsonConvert.DeserializeObject<List<AddAssignMealView>>(mealTrainee);
    
                    foreach (var mealtraiDeserializeObject in mealtraiDeserializeObjects)
                    {
                        var mealWeek = mealtraiDeserializeObject.MealID.Select((m, i) => new
                        {
                            mealtraiDeserializeObject.TraineeID,
                            mealtraiDeserializeObject.DayOfTheWeek,
                            MealID = m,
                            MealTypes = mealtraiDeserializeObject.MealName[i],
                            MealName = mealtraiDeserializeObject.MealTypes[i]
                        }).ToList();
    
                     var meal = mealWeek.Select(x => new MealTrainee()
                        {
                            DayOfTheWeek = x.DayOfTheWeek,
                            MealID = x.MealID,
                            MealName = x.MealName,
                            MealType = x.MealTypes,
                            TraineeID = x.TraineeID
                        }).ToList();
    
                        db.MealTrainees.AddRange(meal);
                    }
    
                    if (!ModelState.IsValid)
                    {
                        return BadRequest(ModelState);
                    }
    
                    db.SaveChanges();
                    dbContextTransaction.Commit();
                    return Ok(meals);
                }
                catch (Exception e)
                {
                    dbContextTransaction.Rollback();
                    Logger.Log(e);
                    return BadRequest();
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 2021-09-23
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      相关资源
      最近更新 更多