2012-06-13 4 views
3

.Net에 처음 접했습니다. 나는이 SQL을 사용하고 두 목록, List<Customer>List<Country>.두 목록을 결합하여 목록 만들기

public class Customer 
{ 
    public int CustomerId {get;set;} 
    public string CustomerName {get;set} 
    public String Street {get;set} 
    public String Address {get;set} 
    public int CountryId {get;set} 
    //...o 
} 


public class Country 
{ 
    public int CountryId {get;set;} 
    public String CountryName{get;set} 
} 

국가 고객을 나열 문을 가입 : 내 프로젝트의 두 개체, CustomerCountry 있습니다. 그러나 나는 고객 이름과 함께 고객을 포함하는 단일 목록을 어떻게 만들 수 있는지 혼란 스럽습니다.

별도의 클래스를 만들 필요가 있습니까? 사전에

감사합니다.

답변

7

Customer 클래스에 국가 ID를 저장하는 대신 객체 자체를 저장하면됩니다.

public Class Customer 
{ 
public int CustomerId {get;set;} 
public string CustomerName {get;set} 
public String Street {get;set} 
public String Address {get;set} 
public Country Country {get;set} 
//...o 
} 

그런 다음 당신은 당신의 Customer 객체에 필요한 모든 정보를 가지고 있고, 같은 목록 또는 아무것도를 병합하려고 할 필요가 없습니다 : 즉, 다음과 같이 그것을 확인한다.

SQL 성명에서 국가 표에 가입하고 결과 집합의 일부로 국가 이름을 얻으면 한 서버에서 왕복 여행으로 고객 목록을 채울 수 있습니다.

0

예, 당신은 당신이 추가로 국가 속성을 포함하는 향상된 고객 클래스를 작성해야 각 (고객 및 국가)에 대해 별도의 속성이 모두 포함 된 클래스를 생성하거나이 필요하거나.

0

고객 클래스에 추가 할 수 있습니다.

그것은 마이크로 소프트의 객체 관계형 - 매퍼 (ORM)이며, 그것은 당신이하려는 것처럼 데이터베이스 액세스를 추상화을 위해 설계되었습니다.

1

데이터베이스에서 올바른 형식으로 데이터를 가져올 수 있다면 꼭 그렇게하십시오! 데이터가 최적화되어 있습니다.

그러나 두 개의 목록이 있고 작업해야하는 경우 LINQ가 도움이됩니다.

var query = from customer in customers 
      from country in countries 
      where customer.CountryId == country.CountryId 
      select new 
      { 
       Customer = customer, 
       Country = country 
      }; 

이것은 고객과 일치하는 국가를 들고 Country 속성을 들고 Customer 속성과 익명 개체의 컬렉션을 제공합니다 : 당신이 뭔가를 할 수 있습니다.

당신이 정말로 당신은 항상 query.ToList()를 작성할 수 List<> 형태로 작업해야하는 경우

.

익명 형식을 사용하지 않는 경우 새 클래스를 만들거나 Customer 클래스를 수정하여 Country을 참조하고 그 인스턴스를 반환 할 수 있습니다.

관련 문제