0

「Gang of Four」のデザイン パターンと同様の構造を実装しようとしています。しかし、私はその点で立ち往生しています。以下が本題です。

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 を取得する方法は?

4

2 に答える 2

1

オブジェクト初期化子でそのようなネストされたプロパティを設定することはできません。

代わりに、子オブジェクトにプロパティを設定する必要があります。

Category = {
    CategoryId = ...
}
于 2013-03-29T19:16:21.497 に答える
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()
          }

      };
于 2013-03-29T20:08:41.227 に答える