2017-07-18 68 views
-1

我有三个名为Material Group,Material Class,Material Type的表。 Group和Class之间以及Class和Type之间存在父子关系,但Group和Type表之间没有直接关系。如何在asp.net中显示多个表中的数据MVC

下面是控制器的当前代码:

变种ctbl_MaterialType = db.ctbl_MaterialType.Include(C => c.ctbl_MaterialClass).INCLUDE(C => c.stbl_Supplier).ToList();

return View(ctbl_MaterialType);

由于没有直接关系,我无法包含组表。即使我尝试下面的代码,但给我的错误:

var ctbl_MaterialType = (from mt in db.ctbl_MaterialType join mc in db.ctbl_MaterialClass on mt.ID_ctbl_MaterialClass equals mc.ID_ctbl_MaterialClass 
where mt.ID_ctbl_MaterialClass == mc.ID_ctbl_MaterialClass 
join mg in db.ctbl_MaterialGroup on mc.ID_ctbl_MaterialGroup equals mg.ID_ctbl_MaterialGroup 
where mc.ID_ctbl_MaterialGroup == mg.ID_ctbl_MaterialGroup 
join ms in db.stbl_Supplier on mt.ID_stbl_Supplier equals ms.ID_stbl_Supplier 
where mt.ID_stbl_Supplier == ms.ID_stbl_Supplier select new { 
              MaterialGroup = mg.MaterialGroup, 
              MaterialClass = mc.MaterialClass, 
              MaterialType = mt.MaterialType, 
              MaterialTypeAlias= mt.MaterialTypeAlias, 
              Supplier = ms.Supplier 
             }); 
return View(ctbl_MaterialType); 

我怎么能包括组表,这样我可以考虑用它来显示?

+0

加入可能是你最好的选择。 请参阅:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/join-clause – DaniDev

+0

我的连接是正确的,但viewmodel是关键。我实现了这一点,它正常工作。 –

回答

1

创建一个ViewModel。 ViewModel是一个包装您需要发送到视图中的所有其他模型的类。

示例:我将创建一个包含学生列表和城市列表的视图模型。

视图模型类:

public class HomeIndexVM //(controllerName + actionName + VM) 
{ 
    public List<Student> Students { get; set; } 
    public List<City> Cities { get; set; } 
} 

在你的行动:

HomeIndexVM viewModel = new HomeIndexVM { 
    Students = context.Students.ToList(); 
    Cities = context.Cities.ToList(); 
}; 

return View(viewModel); 

在你看来:

@model HomeIndexVM 

foreach(Student student in Model.Students) { 
    //... 
} 

我希望你明白了吧。快乐的编码。

+0

通过这种方式,我可以发送两个独立的列表来查看,但他们之间的关系如何?因为我需要显示特定类型和类别的相应组值。目前我正在传递具有类作为外键的TYPE模型。但是组与TYPE没有关系。 –

+0

当我尝试它时它工作正常。感谢您的帮助。快乐的编码。 –

相关问题