2013-04-17 3 views
1

생성 된 코드는 Subdata와 일대 다 많은 관계로 컬렉션 MainData가있는 데이터베이스를 가져 왔습니다.linq을 사용하여 모델을 두 개의 다른 모델의 데이터로 채 웁니다.

public DbSet<MainData> MainDatas{ get; set; } 


public partial class MainData 
    {    
     public string NameOfMainData{ get; set; }   
     public virtual ICollection<SubData> SubDataSet{ get; set; } 
    } 

SubData에는 string 및 int와 같은 일부 복합 데이터 유형이 없습니다.

데이터를 뷰로 가져올 수 있으므로 해당 부분이 작동하는 것으로 알고 있습니다. 이 모델을 병합하여 "NameOfMainData"와 같은 모델에서 SubData의 컬렉션을보기에 쉽게 병합하고 싶지만 실제로 작동하지 않습니다. 여기 내 시도입니다

모델 ;

난 ... 난 DataList에있는 항목을 추가 할 수 있지만 내가 인터넷에서 아무것도 찾을 수 또는 내 자신을 위해 그것을 해결하기 위해 관리하지 않았다는 것을 생각 컨트롤러에서
public class DataIWantInAList 
{ 
    public IList<DataIWant> DataList { get; set; } 

} 
public class DataIWant 
{ 
    public string NameOfMainData{ get; set; } 
    public IEnumerable<SubData> SubDataSet{ get; set; } 
} 

그리고이;

var DataToView= from p in db.MainData 
         select new DataIWant() 
         { 
          NameOfMainData= p.NameOfMainData, 
          SubDataSet= p.SubDataSet 
         }; 


return View(DataToView); 

예상대로 작동하지 않습니다 .LINQ에서는별로 좋지 않지만 꽤 쉽고 그게 그렇게 일을하지 않을 때 실망하게 만듭니다.

모든 입력이 세련됩니다.

+0

당신은 특히 Linq에서이를 수행하는 방법을 알고 싶습니다. 그렇기 때문에이 답변 자체는 아니지만 AutoMapper (http://automapper.org/)를 사용 해본 적이 있습니까? 이런 종류의 일을 * 그렇게 쉽게 *합니다. –

답변

1

부인
- 이것은 단지 중 하나입니다 - 난 단지 :(
을 조정 주시기 바랍니다 LINQ의 적자를 아닙니다 당신이 EntityFramework를 사용하는 가정에서 만든 데이터를 페치 다양한 방법으로 모델을 뷰에 제공하면 실험 해보십시오.
- params는 "필터"에 대한 기본적인 자리 표시 자라고 가정합니다.
- 원하는 방식으로 매핑을 확장 할 수 있습니다. 정확하게 참조해야합니다. 보기에서 다른 경우 런타임 오류가 발생합니다

모델에서이 작업을 수행 할 수 있습니다 (엔티티 가져 오기를 전용 함수로 옮길지라도). 클래스 DataIWant에서 원하는 데이터 만 지정하면됩니다. 특별히 매핑 할 경우, 당신은 가고 싶어 수도 있습니다 귀하의 DataIWantInAList

public class DataIWantInAList 
{ 
    public IList<DataIWant> data; 

    //Instanciation & Initialization 
    public DataIWantInAList(params customparam) 
    { 
     using(EntitySet ent = new EntitySet()) 
     { 
     //fetch data from DB 
     this.data = (from x in ent.DataTableIWant where param == customparam select x).ToList(); 
     } 
    } 
} 

의와 컨트롤러의 시작에 그렇게 :

public ActionResult fooBar() 
{ 
    DataIWantInAList model = new DataIWantInAList(params); 
    return View(model); 
} 

당신은 방식으로보기에서 데이터를 얻을 수있는 반면

var List = model.data; 
+0

감사 드려요,하지만 다른 기능 (또는 어쩌면 컨트롤러에?)로 이동하려고합니다.:) – Tim

+0

완벽하게 작동하려면, 감사합니다. – Tim

0

귀하의 질문을 이해한다고 가정하고. 포함 (...)하여 원하는 데이터를 얻을 수 있습니다.

var DataToView = from p in db.MainData 
         select new DataIWant() 
         { 
          NameOfMainData= p.NameOfMainData.Include(p => p.SubDataSet) 
         } 
0

그런 다음, 관련 개체를로드 Include를 사용하여 모델 유형에 매핑 할 수 있습니다 :

다음과 같습니다 :
var DataToView= from p in db.MainData 
          .Include("ItemTypeReference") 
         select new DataIWant() 
         { 
          NameOfMainData= p.NameOfMainData, 
          SubDataSet= p.SubDataSet 
             .Select(s => new SubData { 
                 // map SubData fields here 
                 }) 
             .ToList() 
         }; 
+0

도움을 주셔서 감사합니다! :) SubDataSet의 select가 나를 위해 그것을 할 수도 있다고 생각합니다. havent는 아직 작동하지만,가는 길과 같습니다. – Tim

관련 문제