1

我定义了以下简单的“教科书”类:

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Category { get; set; }
    }

    public class Category
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

Product 中的 Category 字段是一个整数,引用 Category 类中的 Id 字段。在数据库中,它将是 Product 和 Category 表之间的外键关系。

但是我的应用程序需要显示产品类别的友好名称。

Q1:如下定义一个新类是否正确:

    public class ProductJ : Product
    {
        public string CategoryName { get; set; }
    }

然后,如果我现在有一个方法 getProductsJ 如下:

    public class Test
    {
        public List<Category> Categories = new List<Category>() { ... };
        public List<Product> Products = new List<Product>() { ... };

        public List<ProductJ> getProductsJ()
        {
            var products = from p in Products
               join c in Categories on p.Category equals c.Id
               select new ProductJ { Id = p.Id, , Name = p.Name, CategoryName = c.Name }; //!
            return products.ToList();
        }
    }

Q2:以上是检索具有类别名称的产品列表的最佳方法吗?

Q3:在select语句中(//!)有没有更快的方法来填充基类Product linq的字段而不必一一输入?

谢谢。

4

2 回答 2

1

您可以将连接的结果投影到包含对产品和类别的引用的对象中。

public class Product
{
  public int Id { get; set; }
  public string Name { get; set; }
  public int Category { get; set; }
}

public class Category
{
  public int Id { get; set; }
  public string Name { get; set; }
}

public class ProductCategory
{
  public Product Product { get; set; }
  public Category Category { get; set; }
}

class Program
{
  static void Main(string[] args)
  {
    List<Category> Categories = new List<Category>();
    List<Product> Products = new List<Product>();

    var products = from p in Products
                   join c in Categories on p.Category equals c.Id
                   select new ProductCategory { Product = p, Category = c };

    var list = products.ToList();
  }
}
于 2012-04-13T17:07:32.703 回答
0

每本书都属于一个类别,还是在您的情况下可以属于多个类别?因为如果一本书属于一个类别,那么您只需在 Book Table 中移动类别名称即可。我也建议看看

MVC LINQ to SQL 表连接记录显示

于 2012-04-13T16:46:18.157 回答