在这种情况下,如何将我的模型数据(列表)映射到另一个viewmodel数据(列表)?
这就是我所拥有的:
我的json viewmodel
public class JsonViewModel
{
public List<JsonItem> Items { get; set; }
}
public class JsonItem
{
public string Name { get; set; }
public int Unit { get; set; }
public decimal Price { get; set; }
public IEnumerable<Item> ItemStock { get; set; }
}
我的主要模特
public class Item
{
public int ItemId { get; set; }
public string Name { get; set; }
public int QuantityInPack { get; set; }
public int Quantity { get; set; }
public decimal Price { get; set; }
public bool IsHidden { get; set; }
}
应该以这种方式映射:
Item.QuantityInPack = JsonItem.Unit
Item.Price = JsonItem.Price
其中Item.Name = JsonItem.Name
控制器
public ActionResult Index()
{
// 1. Perform HTTP request to retrieve the JSON.
var webClient = new WebClient();
string rawJson = webClient.DownloadString("http://my_json_data");
// 2. Parse the JSON.
var jsonRootObject = JsonConvert.DeserializeObject<JsonViewModel>(rawJson);
// 3. Map to viewmodel
var viewModel = new JsonViewModel
{
Items = jsonRootObject.Items.Select(i => new JsonItem
{
Name = i.Name,
Unit = i.Unit,
Price = i.Price
}).ToList()
};
/// var TestItem = db.Items.ToList();
/// TestItem.QuantityInPack = JsonItem.Unit
/// TestItem.Price = JsonItem.Price
/// where Item.Name = JsonItem.Name
///
/// (I know it's a bad, but I wanted to explain what I mean)
/// Here i should map data in some way
///
///
// 4. Return mapped model to view
return View( TestItem??? );
}
答案 0 :(得分:2)
如果我理解正确,您希望将JsonViewModel
与主模型同步并返回同步的主模型进行查看:
public ActionResult Index()
{
...
var itemList = db.Items.ToList();
if (jsonRootObject.Items != null)
{
jsonRootObject.Items.ForEach(i =>
{
var item = itemList.FirstOrDefault(p => p.Name = i.Name);
if (item != null)
{
item.QuantityInPack = i.Unit;
item.Price = i.Price;
}
});
}
return View(itemList);
}
答案 1 :(得分:0)
如果我找不到你想要的东西而db意味着dbContext,试试这个:
var names = viewModel.Items.Select(x => x.Name).ToList();
var TestItems = db.Items.Where(x => names.Contains(x.Name)).ToList();
var result = (from item in TestItems
join json in viewModel.Items on item.Name equals json.Name
into subJsons from subJson in subJsons.DefaultIfEmpty()
select new { item, subJson }).ToList().
Select(x => {
var newItem = x.item;
if(subJson != null)
{
newItem.QuantityInPack = x.subJson.Unit;
newItem.Price = x.subJson.Price;
}
return newItem;
}).ToList();
return View(result);