如何创建包含其他 2 类模型的列表<视图模型>?MVC ASP.NET

本文关键字:模型 列表 视图 NET ASP MVC 何创建 创建 其他 包含 | 更新日期: 2023-09-27 18:36:15

如何创建一个列表<视图模型> 与其他 2 类模型?

1 型号:

public class Item
{
    public int ItemId { get; set; }
    public string Code { get; set; }
    public int QuantityInBase { get; set; }
    public bool IsHidden { get; set; }
}

2 型号:

public class JsonViewModel
    {
        public List<JsonItem> Items { get; set; }
    }
    public class JsonItem
    {
        public string Name { get; set; }
        public string Code { get; set; }
        public double Price { get; set; }
    }

正如你在上面看到的 - 两个类都有属性代码 - 它是连接器。

3 模型(目标视图模型)

public class ItemViewModel
    {
        public int ItemId { get; set; }
        public string Code { get; set; }
        public string Name { get; set; }
        public int QuantityInBase { get; set; }
        public decimal Price { get; set; }
        public bool IsHidden { get; set; }
    }
    public class ItemListViewModel
    {
        public List<ItemViewModel> ItemViewList;
    }

这就是我已经尝试在控制器中做的事情。

      public ActionResult ItemsListPartial(JsonViewModel webSocketData)
    //webSocketData has values from webservice
            {
                ItemListViewModel model = new ItemListViewModel();
                var data = db.Items.ToList();
                foreach (var obj in data)
                {
                    model.ItemViewList = ...
                    // here, somehow i have to merge !var data! with                      
                    // !webSocketData! = and it has to be one 
                    // list of ItemListViewModel
                }
                return View("_ItemsListPartial", model);
            }

很难解释。我希望你明白我的意思。

如何创建包含其他 2 类模型的列表<视图模型>?MVC ASP.NET

如果我理解正确,您可以对code属性创建linq join查询。像这样:

var rez= (from p in data
          join q in webSocketData.Items on p.Code equals q.Code
          select new ItemViewModel
          { 
            ItemId = p.ItemId,
            Code = p.Code,
            Name = q.Name,
            QuantityInBase = p.QuantityInBase ,
            Price = q.Price,
            IsHidden = p.IsHidden
          }).ToList();

这将以leftOuterJoin的方式返回ItemViewModel列表。