【发布时间】:2018-04-29 15:01:16
【问题描述】:
朋友们,
我试图在我的 ViewModel 中选择一个集合,但我认为我做错了,因为当我在查询中保留子选择时,我的端点进入了无限循环。
var products =
await _context.product
.Select(prod => new ProductViewModel() {
id = prod.id,
name = prod.name,
description = prod.description,
rating = prod.rating,
price = prod.price,
photos = _context.product_photo
.Where(photo => photo.product_id == prod.id)
.Select(photo => new ProductPhotoViewModel()
{
product_id = photo.product_id,
path = photo.path
}).ToList()
}).ToListAsync();
子选择中的Where() 只是使其工作的失败尝试。我决定把它留在这个问题上,只是说'我也已经尝试过了,但没有用'
我如何子选择一个集合?如果这个集合有另一个子集合,是否也可以选择它?
编辑:
ProductViewModel:
public class ProductViewModel
{
//Product
public string id { get; set; }
public string name { get; set; }
public string description { get; set; }
public int? rating { get; set; }
public decimal price { get; set; }
//Product photo
public List<ProductPhotoViewModel> photos;
}
ProductPhotoViewModel:
public class ProductPhotoViewModel
{
public string product_id { get; set; }
public string path { get; set; }
}
非常感谢。
【问题讨论】:
-
你没有在模型中定义键关系吗??
-
是的,我有。我只是没有把它放在问题中,但在
Where()你可以看到它。顺便说一句,我已经编辑了这个问题。 -
然后使用实体框架加载相关实体并转换为视图模型。不要循环浏览每个产品的照片。
-
你怎么知道它处于无限循环中?看起来您正在尝试将整个
product表和大量product_photo表加载到您的products变量中。这不是一种可扩展的处理方式。 -
你能告诉我们你的
ProductPhotoViewModel类的定义吗?
标签: c# entity-framework lambda asp.net-core