2010-08-19 5 views
0

여기 내 데이터베이스 구조MVC 2보기 모델 데이터는 문제

언어 LANGID PK
LangName의 NVARCHAR (100)이다

카테고리
CATID Pk의
이 isActive 비트

카테고리 텍스트
CATID FK CatName의 NVARCHAR (200)
LANGID 지능

언어
LANGID | LangName
1 | 영어
2 | 프랑스어

범주
CatID | IsActive
1 | True
2 | True
3 | 진정한

CategoryText
CATID | CatName | LangID
1 | 자동차 | 1
1 | 자동 | 2
2 | 채팅 | 2
3 | 비행기 | 1
3 | Avion |



이 나는 ​​ORM으로 프레임 워크 법인과 MVC 2 사용합니다.
먼저 HTML 표에서 렌더링보기를하고 싶습니다.

영어 | 프랑스
자동차 | 자동
NULL | 채팅
비행기 | 내 뷰 모델이 Linq에 루프에 캡슐화되어 수 없기 때문에, 내가보기에 뭔가를 추가하려면

var qry6 = from Cat in _db.Category 
        select new CategoryViewModel 
        { 
         Category = Cat, 
         CatTxt = from lang in _db.Language 
           join ctxt in Cat.CategoryText on lang.LangID equals ctxt .LangID into jointxt 
           from endtxt in jointxt.DefaultIfEmpty() 
           select endtxt 

        }; 

내 문제는 ... :

아비 옹
다음은 내 Linq에 쿼리입니다

var qry6 = new CategoryViewModel { 
        IDontKnowWhatTypeINeedHere = (from Cat in _db.Category 
                select new 
                { 
                 Category = Cat, 
                 CatTxt = from lang in _db.Language 
                   join ctxt in Cat.CategoryText on lang.LangID equals ctxt .LangID into jointxt 
                   from endtxt in jointxt.DefaultIfEmpty() 
                   select endtxt 

                }).ToList(), 
        LangList = _db.Language 
     }; 

내가 예에서와 뷰 모델로 뷰 모델을 넣어 좋은 생각이 있습니다 : 여기
무슨 뜻인지입니다.

감사합니다.

+0

나는 결코 LINQ를 사용하지 않고 솔직히 말해서 내 마음에 가장 먼저 들려오는 것은 _db.Category ... 등의 cat에서 var query =를 사용하는 것입니다. 작동합니다. – bastijn

+0

안녕하세요, SQL to Entity를 사용합니다. Category의 cat에서 var query =와 같은 쿼리를 만들면 FrameworkEntity에 의해 생성 된 내 Category Object의 List가 반환됩니다. –

+0

내 질문은 여기있다 : 내 View Model을 다른 View Model에 캡슐화하는 것이 좋은 방법인가? –

답변

0

다음은 내 컨트롤러에있는 것입니다.

  var query = new DetailViewModel 
     { 
      Lang = _db.Language.ToList(), 
      ViewDet = (from gh in _db.Grp 
         select new MultiDetailViewModel 
         { 
          PKey = gh.GrpID, 
          Txts = (from lang in _db.Language 
            join gtxts in gh.GrpText on lang.LangID equals gtxts.LangID into jointxt 
            from fintxt in jointxt.DefaultIfEmpty() 
            select new MultiLangObject 
            { 
             LangId = lang.LangID, 
             Txt = fintxt != null ? fintxt.GrpTxt : "" 
            }) 
         }).ToList() 
     }; 

여기 내보기 모델이다.

public class DetailViewModel 
{ 
    public List<MultiDetailViewModel> ViewDet { get; set; } 
    public List<Language> Lang { get; set; } 
} 

public class MultiDetailViewModel 
{ 
    public int PKey { get; set; } 
    public IEnumerable<MultiLangObject> Txts { get; set; } 
} 

public class MultiLangObject 
{ 
    public string Txt { get; set; } 
    public int LangId { get; set; } 
} 



다음은 내보기입니다.


사람이 제발, 게시 할 수있는 더 좋은 방법이 있다면

<table class="tblMult center"> 
     <thead> 
      <tr>  
      <% foreach (var lang in Model.Lang) 
       { %> 
       <th><%=lang.LangName %></th> 
      <%} %> 
       <th>Action</th> 
      </tr> 
     </thead> 
     <% foreach (var g in Model.ViewDet) 
      {%> 
      <tr> 
       <% foreach (MultiLangObject gtxt in g.Txts) 
        {%> 
        <td> 
         <%if (gtxt != null) 
          {%> 
           <%: gtxt.Txt%> 
         <%}else{ %> 

         <%} %> 

        </td> 
       <%} %> 
       <td> 
        <a onclick="CallAction('/Group/EditForm/<%= g.PKey %>',event)">Edit</a> 

        <%= Html.ActionLink("Manage", "/Grpdesc/", new { id = g.PKey })%> 
        <%= Html.ActionLink("Delete", "Delete", new { id = g.PKey })%> 
       </td> 
      </tr> 
     <%} %> 
    </table> 

.
bastijn이 말했듯이 View Model에서 View Model을 캡슐화하는 것이 올바른 일이라고 생각하지 않습니다.