Entity framework 基于方法的linq查询
我在数据库中有五个表,其实体类如下- 产品Entity framework 基于方法的linq查询,entity-framework,linq,lambda,Entity Framework,Linq,Lambda,我在数据库中有五个表,其实体类如下- 产品 public int ProductId { get; set; } public string Name { get; set; } public int Category { get; set; } public string Description { get; set; } public string Brand { get; set; } public virtual ProductCategory ProductCategory { get
public int ProductId { get; set; }
public string Name { get; set; }
public int Category { get; set; }
public string Description { get; set; }
public string Brand { get; set; }
public virtual ProductCategory ProductCategory { get; set; }
public virtual ICollection<ProductImage> ProductImages { get; set; }
public virtual ICollection<ProductVariantMapping> ProductVariantMappings
public int ProductVariantId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<ProductVariantMapping> ProductVariantMappings
产品变量映射
public int MappingId { get; set; }
public int ProductId { get; set; }
public int ProductVariantId { get; set; }
public string Value { get; set; }
public System.Guid GUID { get; set; }
public virtual Product Product { get; set; }
public virtual ProductVariant ProductVariant { get; set; }
ProductVariant
public int ProductId { get; set; }
public string Name { get; set; }
public int Category { get; set; }
public string Description { get; set; }
public string Brand { get; set; }
public virtual ProductCategory ProductCategory { get; set; }
public virtual ICollection<ProductImage> ProductImages { get; set; }
public virtual ICollection<ProductVariantMapping> ProductVariantMappings
public int ProductVariantId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<ProductVariantMapping> ProductVariantMappings
现在我必须将我的产品转换为ProductDetailDTO
ProductDetailDTO
public class ProductDetailDTO
{
public int ProductId { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public byte[] Image { get; set; }
public string Description { get; set; }
public string Brand { get; set; }
public List<Variant> Variants { get; set; }
}
public class Variant
{
public string Name { get; set; }
public string Value { get; set; }
public System.Guid Guid { get; set; }
public decimal Price { get; set; }
}
公共类ProductDetailDTO
{
public int ProductId{get;set;}
公共字符串名称{get;set;}
公共字符串类别{get;set;}
公共字节[]映像{get;set;}
公共字符串说明{get;set;}
公共字符串品牌{get;set;}
公共列表变量{get;set;}
}
公共类变体
{
公共字符串名称{get;set;}
公共字符串值{get;set;}
public System.Guid Guid{get;set;}
公共十进制价格{get;set;}
}
我开始这样做-
void ToDTO(List<Product> products)
{
EkartEntities ekartEntities = new EkartEntities();
ProductDetailDTO productDetailDTO = new ProductDetailDTO();
foreach (var item in products)
{
productDetailDTO.ProductId = item.ProductId;
productDetailDTO.Name = item.Name;
productDetailDTO.Category = item.ProductCategory.Name;
productDetailDTO.Description = item.Description;
productDetailDTO.Brand = item.Brand;
productDetailDTO.Image = item.ProductImages.ElementAt(0).Image;
foreach (var variant in item.ProductVariantMappings)
{
productDetailDTO.Variants = variant.ProductVariant // ?
}
}
}
void ToDTO(列出产品)
{
ekartenties ekartenties=新ekartenties();
ProductDetailDTO ProductDetailDTO=新ProductDetailDTO();
foreach(产品中的var项目)
{
productDetailDTO.ProductId=item.ProductId;
productDetailDTO.Name=item.Name;
productDetailDTO.Category=item.ProductCategory.Name;
productDetailDTO.Description=项目描述;
productDetailDTO.Brand=项目.Brand;
productDetailDTO.Image=item.ProductImages.ElementAt(0.Image);
foreach(item.ProductVariantMappings中的var变量)
{
productDetailDTO.Variants=variant.ProductVariant/?
}
}
}
我不知道我该怎么进一步。如何基于GUID提取变量?映射表中组合具有相同
GUID
的ProductVariant
条目的逻辑似乎并不清楚,但是您可以通过GUID
对ProductVariantMappings
中的条目进行分组,然后在组中添加您喜欢的任何logc。下面是一个示例,我在一组具有相同GUID
的变量中取名字和值:
void ToDTO(List<Product> products)
{
EkartEntities ekartEntities = new EkartEntities();
ProductDetailDTO productDetailDTO = new ProductDetailDTO();
foreach (var item in products)
{
productDetailDTO.ProductId = item.ProductId;
productDetailDTO.Name = item.Name;
productDetailDTO.Category = item.ProductCategory.Name;
productDetailDTO.Description = item.Description;
productDetailDTO.Brand = item.Brand;
productDetailDTO.Image = item.ProductImages.ElementAt(0).Image;
productDetailDTO.Variants = item.ProductVariantMappings
.GroupBy(pm => pm.GUID)
.Select(g => new Variant
{
Guid = g.Key,
// Here should be some logic for getting a name of the combination of Variants
// I just take first
Name = g.FirstOrDefault()?.ProductVariant?.Name,
// Here should be some logic for getting a value of the combination of Variants
// Take first again
Value = g.FirstOrDefault()?.Value,
Price = // need inventory table to compute price
})
.ToList();
}
}
void ToDTO(列出产品)
{
ekartenties ekartenties=新ekartenties();
ProductDetailDTO ProductDetailDTO=新ProductDetailDTO();
foreach(产品中的var项目)
{
productDetailDTO.ProductId=item.ProductId;
productDetailDTO.Name=item.Name;
productDetailDTO.Category=item.ProductCategory.Name;
productDetailDTO.Description=项目描述;
productDetailDTO.Brand=项目.Brand;
productDetailDTO.Image=item.ProductImages.ElementAt(0.Image);
productDetailDTO.Variants=item.ProductVariantMappings
.GroupBy(pm=>pm.GUID)
.选择(g=>新变量
{
Guid=g.键,
//这里应该有一些逻辑来获得变体组合的名称
//我只是先走一步
Name=g.FirstOrDefault()?.ProductVariant?.Name,
//这里应该有一些逻辑来获取变量组合的值
//再来一次
Value=g.FirstOrDefault()?.Value,
Price=//需要库存表来计算价格
})
.ToList();
}
}
还要注意,您需要以某种方式将关系添加到inventory表中,这在本文中并没有给出。希望有帮助。您的意思是要按GUID对ProductVariant映射进行分组吗?请添加库存表及其与ProductVariant的关系。
void ToDTO(List<Product> products)
{
EkartEntities ekartEntities = new EkartEntities();
ProductDetailDTO productDetailDTO = new ProductDetailDTO();
foreach (var item in products)
{
productDetailDTO.ProductId = item.ProductId;
productDetailDTO.Name = item.Name;
productDetailDTO.Category = item.ProductCategory.Name;
productDetailDTO.Description = item.Description;
productDetailDTO.Brand = item.Brand;
productDetailDTO.Image = item.ProductImages.ElementAt(0).Image;
productDetailDTO.Variants = item.ProductVariantMappings
.GroupBy(pm => pm.GUID)
.Select(g => new Variant
{
Guid = g.Key,
// Here should be some logic for getting a name of the combination of Variants
// I just take first
Name = g.FirstOrDefault()?.ProductVariant?.Name,
// Here should be some logic for getting a value of the combination of Variants
// Take first again
Value = g.FirstOrDefault()?.Value,
Price = // need inventory table to compute price
})
.ToList();
}
}