从规范化表中检索JOINed数据的标准模式是什么?

时间:2012-04-13 16:27:21

标签: linq linq-to-sql linq-to-objects

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

    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的字段而不必逐个输入?

感谢。

2 个答案:

答案 0 :(得分: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();
  }
}

答案 1 :(得分:0)

每本书是属于一个类别,还是属于您的案例中属于多个类别?因为如果一本书属于一个类别,那么您只需在书籍表中移动类别名称即可。我也建议看看

MVC LINQ to SQL Table Join Record Display