我是表达新手,我和他们一起玩。
将此表达式用于Linq to Entities context.Products.Select(AsProductDto)
:
internal static readonly Expression<Func<Product, ProductDto>>
AsProductDto = product => new ProductDto
{
// repeated code
Name = product.name
// ...
};
我也想要这个构造函数:
public class ProductDto {
public ProductDto() { }
public ProductDto(Product product)
{
// repeated code
Name = product.name
// ...
}
}
因为Linq to Entities中无参数构造函数的要求我无法使用
internal static readonly Expression<Func<Product, ProductDto>>
AsProductDto = product => new ProductDto(product)
无论如何,我可以重复使用(又不重复)标记为重复的代码部分吗?
答案 0 :(得分:3)
为了删除一些重复内容,您可能会为Product
类中的ProductDto
引入一个setter
这种方法可以帮助您减少大部分重复的行,
只有当你有几行复制时,这才有用。复制产品的几个属性。例如
internal static readonly Expression<Func<Product, ProductDto>>
AsProductDto = product => new ProductDto
{
// single line call to setter
Product = product
};
public class ProductDto
{
public ProductDto() { }
public ProductDto(Product product)
{
// single line call to setter
Product = product;
}
public ProductDto Product
{
set
{
// no more repeated code
Name = value.name;
// ...
}
}
}
答案 1 :(得分:0)
只需添加一个向对象添加产品的功能,您就可以从任何想要的地方调用它。
public class ProductDto {
public ProductDto() { }
public ProductDto(Product product)
{
AddProduct(product)
}
public AddProduct(Product product)
{
Name = product.name
}
}
同样适用于上述代码