2012-04-13 2 views
1

나는 다음과 같은 간단한 "교과서"클래스가 정의되어 있습니다 : 제품에정규화 된 테이블에서 JOIN 된 데이터를 검색하는 표준 패턴은 무엇입니까?

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; } 
    } 

카테고리 필드는 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 : 선택 진술 (//!)에서 기본 클래스 제품 linqwithout을 하나씩 입력해야하는 필드를 빠르게 채울 수 있습니까?

감사합니다.

답변

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(); 
    } 
} 
+0

고마워. 그 대답은 Q3. 그러나 테이블 그리드에 바인딩하기가 어려울 수 있습니다. –

+0

왜 바인딩이 어려워 집니까? 하위 속성 바인딩을 사용할 수 있습니까? 예 : list [0] .Category.Name? – dugas

+0

저는 여기에 @thedugas를 사용하고 있는데, 이것이 어떻게 테이블 그리드에 바인딩하는 것을 어렵게하는지 모르겠습니다. IEnumberable & IList를 전에 datagrids에 쉽게 바인딩했습니다. –

0

각 도서는 하나의 범주에 속하며, 아니면 귀하의 경우 둘 이상의 범주에 속할 수 있습니까? 책이 하나의 카테고리에 속하면 책 표에서 카테고리 이름을 간단히 이동할 수 있기 때문입니다. 또한 난 당신이 제품 및 카테고리 모두에 대한 참조를 포함하는 객체로 조인의 결과를 투사 할 수

MVC LINQ to SQL Table Join Record Display

+0

질문에 대한 답변은 제품 당 하나의 카테고리 일뿐입니다. (제품은 책이 아니지만 마음에 들지 않습니다.)하지만 당신이 제안한 것을 수행하면 테이블을 다시 정규화하고 카테고리 목록을 유지하는 것을 어렵게 만듭니다. AdventureWorks 방식으로 데이터 조직에서 내가하는 일이 아닌가? –

+0

나는 "표준화 해제"를 의미했습니다. (안드로이드의 Swype은 항상 내 말을 대신해 단어를 넣으려고합니다.) –

+0

내가 위에서 언급 한 링크를 확인 했습니까? 나는 그 포스트가 좋은 apporach 중 하나를 포함한다고 생각한다 – Jawad

관련 문제