목록

2016-07-08 7 views
0

에서 중첩 된 모델을 만들어 데이터베이스에서 데이터를 가져 오는에 대한 기존의 클래스를목록

public class Employee 
{ 
    public int? EmployeeId { get; set; } 
    public string EmployeeName { get; set; } 
    public int? LocationId { get; set; } 
    public string LocationName { get; set; } 
    public int? DesignationId { get; set; } 
    public string DesignationName { get; set; } 
} 

코드가 :

using (var ds = new EmployeeDS()) 
       { 
        using (var dataAdapter = new DataSet.EmployeeDSTableAdapters.EmployeeTableAdapter()) 
        { 
        dataAdapter.FillEmployee(ds.Employee,Id); 
         var result = (from DataRow row in ds.Employee.Rows 
            select new Employee 
            { 
             EmployeeId = (row["EmployeeID"] == DBNull.Value) ? null : (int?)row["EmployeeID"], 
             EmployeeName = (row["EmployeeName"] == DBNull.Value) ? string.Empty : (string)row["EmployeeName"], 
             LocationId = (row["LocationId"] == DBNull.Value) ? null : (int?)row["LocationId"], 
             LocationName = (row["LocationName"] == DBNull.Value) ? string.Empty : (string)row["LocationName"], 
             DesignationId = (row["DesignationId"] == DBNull.Value) ? null : (int?)row["DesignationId"], 
             DesignationName = (row["DesignationName"] == DBNull.Value) ? string.Empty : (string)row["DesignationName"], 
            }).ToList(); 
        } 
       } 

그것의 여러 위치 또는을 가진 직원이 반환 여러 행 됐었 작업 내가 USI 오전

public class EmployeeNested 
    { 
     public int? EmployeeId { get; set; } 
     public string EmployeeName { get; set; } 
     public List<Location> Locations { get; set; } 
     public List<Designation> Designations { get; set; } 
    } 
    public class Location 
    { 
     public int? LocationId { get; set; } 
     public string LocationName { get; set; } 
    } 
    public class Designation 
    { 
    public int? DesignationId { get; set; } 
    public string DesignationName { get; set; } 
    } 

: designation.So 내가 좋아하는 중첩 된 모델로 데이터를 반환해야 NG 중첩 된 모델을 반환 코드 :

var tempList=result.GroupBy(x => x.EmployeeId, (key, g) => g.OrderBy(e => e.EmployeeId).First()); 
        foreach (var item in tempList) 
        { 
         item.Designations = result 
              .Where(x => x.EmployeeId== item.EmployeeId) 
              .Select(x => new Designation 
               { 
                DesignationId = x.DesignationId, 
                DesignationName = x.DesignationName 
               }).ToList(); 
         item.Locations = result 
              .Where(x => x.EmployeeId== item.EmployeeId) 
              .Select(x => new Location 
               { 
                LocationId = x.LocationId, 
                LocationName = x.LocationName 
               }).ToList(); 
        } 

질문 :

  • 중첩 된 목록에 단순 목록을 변환 할 수있는 더 나은 솔루션이 있습니까?

  • 플랫 목록을 중첩 목록으로 변환하기위한 일반적인 방법을 만들 수 있습니까? 그래서 나는 다른 기능을 위해 그것을 재사용 할 수있다.

  • 데이터 세트에서 직접 중첩 목록을 만들 수 있습니까?

나는이 일을하기에 좋은 단색 패턴이 있다고 확신한다. 나는 그것을 찾을 수 없다.

답변

0

결과 및 일부 프로그래밍 논리를 반복하지 않고 데이터 집합에서 중첩 목록을 만드는 방법이 있다고 생각하지 않습니다. 관계형 데이터베이스를 사용하는 경우 엔티티 프레임 워크를 사용하여 데이터베이스를 올바르게 구성한 후에 EmployeeNested 클래스와 비슷한 것을 생성하는 것이 좋습니다.

+0

테이블 간에는 아무런 관련이 없습니다. 또한 프로젝트 전체에서 데이터 세트를 사용했습니다. 그래서 내가 한 일은 중첩 목록을 만드는 올바른 방법일까요? – Binu

0

중첩 목록을 중첩 목록으로 변환하는 더 좋은 해결책이 있습니까?

제 지식에 따르면 더 나은 해결책은 입력 목록을 가져 와서 다른 유형의 목록으로 처리하는 유틸리티 방법을 만드는 것입니다. 아래 샘플 코드를 참조하십시오.

public static List<EmployeeNested> ProcessEmployeeData(List<Employee> result) 
     { 
      return result.Where(x => x.EmployeeId.HasValue).GroupBy(x => x.EmployeeId.Value).Select(x => new EmployeeNested 
      { 
       EmployeeId = x.Key, 
       EmployeeName = x.First().EmployeeName, 
       Locations = x.Select(s => new Location 
       { 
        LocationId = s.LocationId, 
        LocationName = s.LocationName 
       }).ToList(), 
       Designations = x.Select(s => new Designation 
       { 
        DesignationId = s.DesignationId, 
        DesignationName = s.DesignationName 
       }).ToList() 
      }).ToList(); 
     } 

는 중첩리스트 플랫리스트를 변환하는 일반적인 방법을 만들 수? 그래서 나는 다른 기능을 위해 그것을 재사용 할 수있다.

모든 속성을 상속하는 공통 속성이 있고 어떤 컬렉션에서 특정 개체를 추가해야하는지 알 수있는 일반 메서드가없는 경우 일반 메서드를 만들 수 없습니다. 방법이 있다면 구현하는 것이 복잡 할 것입니다.

데이터 세트에서 직접 중첩 목록을 만들 수 있습니까? 데이터 세트는 우리가 데이터베이스에서 가져온 데이터를 바인딩 할 콜렉션의 유형에 대한 지식이 없기 때문에

내 이해 당, 우리는, 데이터 집합에서 직접 중첩 수집 할 수 없습니다.당신이 직접 수집을 원한다면 ORM 프레임 워크가 엔티티 프레임 워크처럼 작동하는 방식 인 우리 모델과 바인드에 따라 데이터베이스를 쿼리하는 기본 구조가 있어야합니다.