2013-07-13 27 views

回答

2

只需将它们创建为POCO(简单的包含数据定义的C#类),例如

class source 
{ 
    public List<category> Categories = new List<category>(); 
} 

class category 
{ 
    public category(string name) 
    { 
     Name = name; 
    } 

    public string Name {get;set;} 

    public List<product> Products = new List<product>(); 

} 

class product 
{ 
    public product(string name) 
    { 
     Name = name; 
    } 

    public string Name { get; set; } 
} 

然后进行测试:

static void test() 
    { 
     product spoon = new product("spoon"); 

     category cutlery = new category("cutlery"); 
     cutlery.Products.Add(spoon); 

     source mystuff = new source(); 
     mystuff.Categories.Add(cutlery); 

    } 
1
  • 来源应该有类别
  • 类别集合应该有产品的集合。
  • 产品仅由类别和不“知道”的 另外两个。
+0

这是一种选择,但关系可以是对称的:产品可以有一个类别属性,类别可以有一个源属性。 –

+0

数据集之间的关系是否正确? – user2199343

1

你需要两个类CategoryProduct。每个Product都有其所属的属性Category。 您可以将它们存储在Dictionary<Category, List<Product>>中,然后您可以轻松查找给定类别的所有产品。

这里是一个可能的实现,您可以在一本字典,因为它们将覆盖GetHashCode使用这些类甚至是关键:

public class Category 
{ 
    public int CategoryId { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 

    public override int GetHashCode() 
    { 
     return CategoryId.GetHashCode(); 
    } 
    public override bool Equals(object obj) 
    { 
     Category c2 = obj as Category; 
     if (c2 == null) return false; 
     return CategoryId == c2.CategoryId; 
    } 
} 

public class Product 
{ 
    public int ProductId { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    publlic Category Category { get; set; } 

    public override int GetHashCode() 
    { 
     return ProductId.GetHashCode(); 
    } 
    public override bool Equals(object obj) 
    { 
     Product p2 = obj as Product; 
     if (p2 == null) return false; 
     return ProductId == p2.ProductId; 
    } 
} 

初始化(通常是从DAL):

var cat1 = new Category(){CategoryId=1,Name="ABC"}; 
var cat2 = new Category(){CategoryId=2,Name="DEF"}; 

var products1 = new List<Product>(){ 
    new Product(){ProductId=1,Name="Prod1",Category=cat1}, 
    new Product(){ProductId=2,Name="Prod2",Category=cat1}, 
    new Product(){ProductId=3,Name="Prod3",Category=cat1} 
}; 
var products2 = new List<Product>(){ 
    new Product(){ProductId=4,Name="Prod4",Category=cat2}, 
    new Product(){ProductId=5,Name="Prod5",Category=cat2}, 
}; 

var categoryProducts = new Dictionary<Category, List<Product>>() 
{ 
    { cat1, products1}, 
    { cat2, products2} 
}; 

现在你可以查询给定类别的所有产品:

List<Product> products = categoryProducts[cat1]; 

来源可能是一个List<Category>

var source = new List<Category>(); 
// fill from DAL 
foreach(Category cat in source) 
    foreach(Product product in categoryProducts[cat]) 
     Console.WriteLine("Category:{0} Product:{1}", cat.Name, product.Name);