2010-01-06 6 views
5

내가 가지고있는 다음과 같은 두 개의 테이블 (기본 개요) :- ASP.Net MVC

Tbl_CategoryType

ID LevelID 설명

Tbl_Levels ID 이름

기본적으로 Tbl_Levels.Name 데이터를 참조하는 동안 모든 정보를 Tbl_CategoryType 테이블에 표시하려고합니다. Tbl_CategoryType.LevelID 번호를 기반으로합니다.

다음과 같이 내 저장소에서 조인을 시도했습니다.

public IQueryable GetAllTypesInCategory(int CatID) 
{ 
    return (from x in DBEntities.LU_LST_CategoryTypeSet 
      where x.CategoryID == CatID && x.Enabled == 1 
      join y in DBEntities.LU_LST_LevelSet on x.LevelID equals y.ID 
      select new {x, y}); 
} 

그러나 해당 메서드를 호출 할 때 범주 또는 수준 중 하나의 형식에 맞지 않으므로 형식을 지정할 수 없습니다.

사용자 지정보기 모델을 통해이 작업을 수행해야한다고 가정하고 있지만 단계를 파악할 수 없습니다. 당신의 LINQ 문이 줄을 사용하여 미리

답변

3

두 엔터티간에 연결이있는 경우 두 엔터티를 사용하여 두 번째 형식에 액세스 할 수 있습니다. 이 경우에해야 할 유일한 작업은 Include() 메서드를 사용하여 연결 데이터를로드하는 것입니다.

 public List<LU_LST_CategoryType> GetAllTypesInCategory(int CatID) 
     { 
      return (from x in DBEntities.LU_LST_CategoryTypeSet.Include("LU_LST_LevelSet") 
        where x.CategoryID == CatID && x.Enabled == 1 
        select x).ToList(); 
     } 

모든 LU_LST_CategoryTypeSet category에 대한보다 당신이 작동하지 않습니다 category.LU_LST_Level

+1

감사합니다. – shif

4

에서

감사 :

select new {x, y} 

당신이 당신의 엔티티 유형에서 다른 유형 인 새로운 익명 형식을 만들 수 있습니다.

당신이 EntityFramework 또는 외부 엔터티를 만들기 위해 외래 키 관계를 자동으로 해결하는 다른 무거운 프레임 워크를 사용하고 있지 않다고 생각합니다. true이면 ViewModel을 만들어야합니다.

각 엔티티 중 하나를 속성으로 포함하는 간단한 래퍼 클래스를 만듭니다. 대신 익명 형식을 만드는, MyViewModel 유형을 만들려면 Linq에 문에 그런

public class MyViewModel 
{ 
    public MyViewModel(LU_LST_CategoryTypeSet x, LU_LST_LevelSet y) 
    { 
     Category = x; 
     Level = y; 
    } 

    public LU_LST_CategoryTypeSet Category { get; set;} 
    public LU_LST_LevelSet Level { get; set; } 
} 

:

public IQueryable GetAllTypesInCategory(int CatID) 
{ 
    return (from x in DBEntities.LU_LST_CategoryTypeSet 
      where x.CategoryID == CatID && x.Enabled == 1 
      join y in DBEntities.LU_LST_LevelSet on x.LevelID equals y.ID 
      select new {x, y}); 
} 

그런 다음 모델 클래스로 결과를 복사

var listOfTypes = GetAllTypesInCategory(catID); 
    foreach (var item in listOfTypes) 
    { 
     var model = new MyViewModel(item.x, item.y); 

     //Do whatever with the model to get it to the view. 
    } 

은보기 상속합니다 MyViewModel에서.

+0

호출 할 수 있습니다. 익명 형식을 만든 다음 데이터를 MyViewModel 컬렉션에 복사해야합니다. – LukLed

+0

오, 그래, 그의 방법이 IQueryable을 원하는 것처럼 보입니다. 그 자리에 고마워. – womp

+0

유감스럽게도 Entity Framework를 사용하고 있다는 사실을 잊어 버렸습니다. – shif