Asp.net mvc ASP MVC-读取相关数据
有没有更快/更好的方法 我这里有一个简单的一对多关系Asp.net mvc ASP MVC-读取相关数据,asp.net-mvc,relationship,Asp.net Mvc,Relationship,有没有更快/更好的方法 我这里有一个简单的一对多关系 public class Professor { public int Id { get; set; } public string Name { get; set; } public virtual IEnumerable<Subject> Subjects { get; set; } } public class Subject { public int Id { get; set; }
public class Professor
{
public int Id { get; set; }
public string Name { get; set; }
public virtual IEnumerable<Subject> Subjects { get; set; }
}
public class Subject
{
public int Id { get; set; }
public string Name { get; set; }
public int ProfessorId { get; set; }
public virtual Professor Professor { get; set; }
}
每个教授的视图加载主题
<div>
@foreach (var prof in Model.Professors)
{
<p>@prof.Name</p>
foreach (var subj in Model.Subjects)
{
if (subj.ProfessorId == prof.Id)
{
<span>@subj.Name , </span>
}
}
<hr />
}
</div>
@foreach(模型教授var prof.Professors)
{
@教授姓名
foreach(模型主体中的var Sub)
{
如果(学科教授Id==教授Id)
{
@主体名称,
}
}
}
即席查询不编译,也没有执行计划,因此当您使用索引视图时,可以获得比linq查询更好的性能,linq查询在没有索引和执行计划的情况下动态连接表。但是,当您拥有大量数据和/或负载时,这是非常有用的。
另一方面,您可以使用Automapper展平复杂对象
这样地
简化视图模型到模型的映射,反之亦然。
我在我的一些项目中使用了Automapper,我能够简化我的项目。
您必须根据需要进行权衡。即席查询不编译,也没有执行计划,因此当您使用索引视图时,您可以获得比linq查询更好的性能,linq查询在没有索引和执行计划的情况下动态连接表。但是,当您拥有大量数据和/或负载时,这是非常有用的。 另一方面,您可以使用Automapper展平复杂对象 这样地 简化视图模型到模型的映射,反之亦然。 我在我的一些项目中使用了Automapper,我能够简化我的项目。
您必须根据需要进行权衡。假设您使用的是
实体框架
,并且从教授
到主题
之间存在一对多关系
我们不需要加载所有主题
,只需要加载一些有教授的主题,使用。您的代码将是:
public ActionResult Index()
{
TestDBContext db = new TestDBContext();
// Remember to add using System.Data.Entity
var profs = db.Professors.Include(x => x.Subjects).ToList();
return View(profs);
}
然后,在视图中,您只需这样做:
<div>
@foreach (var prof in Model)
{
<p>@prof.Name</p>
foreach (var subj in prof.Subjects)
{
<span>@subj.Name , </span>
}
<hr />
}
</div>
@foreach(模型中的var prof)
{
@教授姓名
foreach(教授科目中的var Subc)
{
@主体名称,
}
}
代码没有经过测试,但我相信它工作得很好。假设您使用的是
实体框架
,并且从教授
到主题
之间存在一种一对多关系
我们不需要加载所有主题
,只需要加载一些有教授的主题,使用。您的代码将是:
public ActionResult Index()
{
TestDBContext db = new TestDBContext();
// Remember to add using System.Data.Entity
var profs = db.Professors.Include(x => x.Subjects).ToList();
return View(profs);
}
然后,在视图中,您只需这样做:
<div>
@foreach (var prof in Model)
{
<p>@prof.Name</p>
foreach (var subj in prof.Subjects)
{
<span>@subj.Name , </span>
}
<hr />
}
</div>
@foreach(模型中的var prof)
{
@教授姓名
foreach(教授科目中的var Subc)
{
@主体名称,
}
}
代码没有经过测试,但我相信它工作得很好。如果您正确设置了模型和关系,那么
Professor
将包含Subject
的集合,您所需要的就是foreach(prof.Subjects中的var subj){@subj.Name,}
如果您正确设置了模型和关系,然后,Professor
将包含其主题的集合
,您所需要的就是foreach(prof.Subjects中的var sub){@subc.Name,}
是的,我认为它会起作用,这是@Stephen Muecke的答案的完整版本。顺便说一句,我对Linq和lambda表达式不熟悉,这就是我问这个noob问题的原因。。非常感谢你们!使用lambda查询还是使用linq查询,哪个更快@他们是一样的。查看此以了解更多信息:)很酷,Linq表达式更具可读性,但Lambda要短得多。是的,我认为它会起作用,这是@Stephen Muecke的答案的完整版本。顺便说一下,我对Linq和Lambda表达式比较陌生,这就是我问这个noob问题的原因。。非常感谢你们!使用lambda查询还是使用linq查询,哪个更快@他们是一样的。查看此项了解更多信息:)很酷,Linq表达式更具可读性,但Lambda要短得多。