我正在尝试实现类似'四人帮'设计模式的结构。但我坚持到底。以下是问题。
public class Product
{
public Product()
{
Category=new Category();
}
public Product(int productId, string productName, string weight, double unitPrice, int unitsInStock)
: this()
{
ProductId = productId;
ProductName = productName;
Weight = weight;
UnitPrice = unitPrice;
UnitsInStock = unitsInStock;
}
public int ProductId { get; set; }
public string ProductName { get; set; }
public string Weight { get; set; }
public double UnitPrice { get; set; }
public int UnitsInStock { get; set; }
public Category Category { get; set; }
}
public class Category :
{
public Category()
{
}
public Category(int categoryId, string name, string description)
: this()
{
CategoryId = categoryId;
Name = name;
Description = description;
}
public int CategoryId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
通过以下方式获取产品清单。
public List<Product> GetProduct()
{
string sql =
@"SELECT ProductId, ProductName, Weight, UnitPrice, UnitsInStock,CategoryId,
FROM [Product]
return Db.ReadList(sql, Make);
}
private static Func<IDataReader, Product> Make = reader =>
new Product
{
ProductId = reader["ProductId"].AsId(),
ProductName = reader["ProductName"].AsString(),
Weight = reader["Weight"].AsString(),
UnitPrice = reader["UnitPrice"].AsDouble(),
UnitsInStock = reader["UnitsInStock"].AsInt(),
Category.CategoryId=reader["CategoryId].AsInt()
};
但是当我写下面的时候我得到了错误。
Category.CategoryId=reader["CategoryId].AsInt()
如何在列表中获取产品的CategoryId?
答案 0 :(得分:1)
您无法在对象初始值设定项中设置类似的嵌套属性。
相反,您需要在子对象上设置属性:
Category = {
CategoryId = ...
}
答案 1 :(得分:0)
代码如下所示。(如果有人需要帮助的话)。
private static Func<IDataReader, Product> Make = reader =>
new Product
{
ProductId = reader["ProductId"].AsId(),
ProductName = reader["ProductName"].AsString(),
Weight = reader["Weight"].AsString(),
UnitPrice = reader["UnitPrice"].AsDouble(),
UnitsInStock = reader["UnitsInStock"].AsInt(),
Version = reader["Version"].AsBase64String(),
Category =
{
CategoryId = reader["CategoryId"].AsId(),
Name = reader["Name"].AsString()
}
};