【发布时间】:2021-01-04 10:41:02
【问题描述】:
我正在尝试减少我的 Json 响应/数据库查询的大小,因此我只选择我的代码中所需的列。
我有以下表格(所有表格中有更多列,但为我的帖子简化了):
产品
产品 ID (PK)
名称
制造商
内部Sku
外部Sku
恩
产品变化
ProductVariationId (PK)
内部Sku
外部Sku
伊恩
产品 ID (FK)
产品图片
ProductImageId (PK)
IsDefault(位)
图片网址
产品 ID (FK)
ProductVariationId (FK / Null)
我为 Product 和 ProductVariation 创建了简单的模型(ProductSimple、ProductVariationSimple)。
我的代码只会为每个选择第一张图片。使用我当前的代码,我几乎可以实现我想要的,但是产品图片有问题。
Product 可以有图片,ProductVariation 也可以有图片。但是,如果 ProductVariation 没有任何图像,我想选择父产品的图像(如果有)。这可能吗?
这是我当前的代码:
var products = await _context.Product
.Include(e => e.ProductImages.Where(p => p.IsDefault == true && p.ProductVariationId == null))
.Include(m => m.Manufacturer)
.Include(v => v.ProductVariations).ThenInclude(x => x.ProductImages.Where(p => p.IsDefault == true && p.ProductVariationId == x.ProductVariationId))
.Select(p => new Product()
{
ProductId = p.ProductId,
Name = p.Name,
Manufacturer = p.Manufacturer,
ManufacturerSku = p.ManufacturerSku,
InternalSku = p.InternalSku,
Ean = p.Ean,
ProductImages = p.ProductImages,
ProductVariations = p.ProductVariations.Select(x => new ProductVariation {
ProductVariationId = x.ProductVariationId,
Name = x.Name,
InternalSku = x.InternalSku,
ManufacturerSku = x.ManufacturerSku,
Ean = x.Ean,
ProductImages = x.ProductImages,
ProductId = x.ProductId
}).ToList()
}
)
.ToListAsync();
var productSimple = products.Select(
e => new ProductSimple
{
ProductId = e.ProductId,
Name = e.Name,
ManufacturerName = e.Manufacturer?.Name,
ManufacturerSku = e.ManufacturerSku,
InternalSku = e.InternalSku,
Ean = e.Ean,
ImageUrl = e.ProductImages.FirstOrDefault()?.ImageUrl,
ProductVariationSimples = e.ProductVariations.Select(
v => new ProductVariationSimple
{
ProductVariationId = v.ProductVariationId,
Name = v.Name,
InternalSku = v.InternalSku,
ManufacturerSku = v.ManufacturerSku,
Ean = v.Ean,
ProductId = v.ProductId,
ImageUrl = v.ProductImages.FirstOrDefault()?.ImageUrl //This is where my problem is. I want to select first image of the variation or first image of parent if not available
})
}
).AsQueryable();
return productSimple;```
Many thanks in advance.
【问题讨论】:
标签: c# sql-server entity-framework entity-framework-core