Asp.net mvc MVC2视图模型数据问题

Asp.net mvc MVC2视图模型数据问题,asp.net-mvc,model-view-controller,view,viewmodel,Asp.net Mvc,Model View Controller,View,Viewmodel,这是我的数据库结构 语言 LangID PK 朗格曼(100) 类别 CatID Pk i活动位 类别文本 CatID FK CatName nvarchar(200) LangID Int 语言 LangID | LangName 1 |英语 2 |法语 类别 CatID | IsActive 1 |正确 2 |正确 3 |正确 类别文本 CatID | CatName | LangID 1 |车| 1 1 |自动| 2 2 |聊天| 2 3 |平面| 1 3|Avion|2 我使用MVC

这是我的数据库结构

语言 LangID PK
朗格曼(100)

类别
CatID Pk
i活动位

类别文本
CatID FK CatName nvarchar(200)
LangID Int

语言
LangID | LangName
1 |英语
2 |法语

类别
CatID | IsActive
1 |正确
2 |正确
3 |正确

类别文本
CatID | CatName | LangID
1 |车| 1
1 |自动| 2
2 |聊天| 2
3 |平面| 1
3|Avion|2


我使用MVC2和框架实体作为ORM。
首先,我希望在html表中有这样的呈现视图

英语|法语
汽车|自动
空|聊天
飞机飞行

这是我的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 

                   };
我的问题是,如果我想在视图中添加其他内容,我不能,因为我的ViewModel被封装在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
        };
像我在示例中所做的那样,将视图模型放入视图模型是一个好主意


谢谢

这是我控制器里的东西。

            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; }
}
public类DetailViewModel
{
公共列表ViewDet{get;set;}
公共列表语言{get;set;}
}
公共类多细节视图模型
{
public int PKey{get;set;}
公共IEnumerable Txts{get;set;}
}
公共类多语言对象
{
公共字符串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>

行动
编辑


如果有人有更好的方法来做这件事,请张贴
正如巴斯蒂金所说,我不认为将视图模型封装到视图模型中是正确的做法。

老实说,我从来没有使用LINQ,但我想到的第一件事是使用var query=from cat in _db.Category。。。等等。作为评论发布,我甚至不确定这是否有效。嗨,bastijn,我使用SQL来创建实体。当我在Category中进行类似于var query=from cat的查询时,它将返回由FrameworkEntity生成的类别对象列表。我这里的问题是:将我的视图模型封装到其他视图模型中是否是一种好的做法。不,我认为不是。