友
我试图在我的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; }
}
非常感谢。
答案 0 :(得分:1)
嵌套查询通常是一个坏主意,因为当您想要读取结果而当前正在读取其他结果时,底层数据读取器可能会导致冲突。
我不太了解您的数据设置,我建议您完全拆分它。因此,您首先查询产品,然后查询所有照片并将其合并到视图模型中:
// load all products
var products = await _context.product
.Select(prod => new ProductViewModel() {
id = prod.id,
name = prod.name,
description = prod.description,
rating = prod.rating,
price = prod.price,
})
.ToListAsync();
// find all product photos
var productIds = products.Select(p => p.id).Distinct().ToList();
var photos = await _context.product_photo
.Where(photo => productIds.Contains(photo.product_id))
.Select(photo => new ProductPhotoViewModel()
{
product_id = photo.product_id,
path = photo.path
})
.ToListAsync();
// match photos to products
foreach (var product in products)
{
product.photos = photos.Where(photo => product_id == product.id).ToList();
}