我有一个简单的例子
我想显示公司和员工的列表
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 }
是否有一种简单的方法可以将其与视图模型相关联,或者是否有另一种最简单的方法来执行此类简单的操作。
答案 0 :(得分:2)
假设您已正确连接Entity Framework中的导航属性,您应该能够:
var data = db.Companies
.Include(i => i.Employees)
.Tolist();
然后你可以遍历它们:
foreach (var company in data)
{
foreach (var employee in company.Employees)
{
}
}
不要忘记包含using System.Data.Entity;
,否则您将无法使用强类.Include()
方法。
答案 1 :(得分:2)
通过添加ToList()
:
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 }).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; }
}
然后使用automapper来映射数据
var comVm = data
.Select(comp => AutoMapper.Mapper.DynamicMap(comp, comp.GetType(), typeof(CompanyVm)))
.Select(comp => comp as CompanyVm).ToList();