Asp.net 实体MVC和ViewModels一对多示例

Asp.net 实体MVC和ViewModels一对多示例,asp.net,entity-framework,viewmodel,Asp.net,Entity Framework,Viewmodel,我有一个简单的例子 我想显示公司和员工的列表 ACME David Simon Zac Microsoft Kevin Paul 目前,我执行一个linq查询,返回公司模型,然后遍历模型树以获取员工。这很好,但是在上面的示例3查询中,我看到了它的作用。一个用于公司,然后两个用于员工的查询,每个公司一个 我想知道我是否最好使用一个ViewModel来表示数据并填充它。然而,当尝试构建视图模型时,我不知道如何在不进行多个查询的情况下构建它 var data

我有一个简单的例子

我想显示公司和员工的列表

ACME
    David
    Simon
    Zac
Microsoft
    Kevin
    Paul
目前,我执行一个linq查询,返回公司模型,然后遍历模型树以获取员工。这很好,但是在上面的示例3查询中,我看到了它的作用。一个用于公司,然后两个用于员工的查询,每个公司一个

我想知道我是否最好使用一个ViewModel来表示数据并填充它。然而,当尝试构建视图模型时,我不知道如何在不进行多个查询的情况下构建它

var data =
    from company in db.Companies
    join employee in db.Employees on company.companyId equals employee.companyId
    orderby company.name, employee.name
    select new { companyName = company.name, employeeName = employee.name }

是否有一种简单的方法将其链接到视图模型,或者是否有另一种最佳实践方法来执行类似的简单操作。

假设您在Entity Framework中正确连接了导航属性,您应该能够执行以下操作:

var data = db.Companies
  .Include(i => i.Employees)
  .Tolist();
然后,您可以在它们之间循环:

foreach (var company in data)
{
  foreach (var employee in company.Employees)
  {
  }
}

不要忘记使用System.Data.Entity包含
或您将无法使用强类型的
.Include()
方法。

假设您已正确连接实体框架中的导航属性,您应该能够执行以下操作:

var data = db.Companies
  .Include(i => i.Employees)
  .Tolist();
然后,您可以在它们之间循环:

foreach (var company in data)
{
  foreach (var employee in company.Employees)
  {
  }
}

不要忘记使用System.Data.Entity包含
或您将无法使用强类型的
.Include()
方法。

您可以通过添加
ToList()
在一次往返中从数据库获取数据:

或者获取公司类型而不是匿名类型

var data = db.Companies.Include(t => t.Employees )
            .Select(t => new
            {
                t.name,
                Employees = t.Employees .Select(p => new { p.name})
            }).ToList();
或者,如果要使用ViewModel,请创建ViewModel:

public class CompanyVm
{
    public string name { get; set; }

    public IEnumerable<Employee> Employees{ get; set; }
}

public class Employee
{
    public string name { get; set; }
}

通过添加
ToList()
,您可以在一次往返中从数据库中获取数据:

或者获取公司类型而不是匿名类型

var data = db.Companies.Include(t => t.Employees )
            .Select(t => new
            {
                t.name,
                Employees = t.Employees .Select(p => new { p.name})
            }).ToList();
或者,如果要使用ViewModel,请创建ViewModel:

public class CompanyVm
{
    public string name { get; set; }

    public IEnumerable<Employee> Employees{ get; set; }
}

public class Employee
{
    public string name { get; set; }
}

不确定这是一个怎样的ViewModel示例不确定这是一个怎样的ViewModel示例