C# 在Linq中,哪个更有效,是join还是include
我试图得到一个对象集合,我想找出哪个更有效。现在我的查询得到16个结果,但我们可能正在处理1000个数据集 假设我正在使用以下模型:C# 在Linq中,哪个更有效,是join还是include,c#,linq,C#,Linq,我试图得到一个对象集合,我想找出哪个更有效。现在我的查询得到16个结果,但我们可能正在处理1000个数据集 假设我正在使用以下模型: public ProjectSubmission() { [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public Guid ProjectSubmissionId { get; set; } public System.Guid ProjectId { get; set;
public ProjectSubmission()
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid ProjectSubmissionId { get; set; }
public System.Guid ProjectId { get; set; }
[ForeignKey("ProjectId")]
public virtual Project Project { get; set; }
public string SubmissionTitle { get; set; }
}
public Project()
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid ProjectId { get; set; }
public string Title { get; set; }
}
这将为我提供更好的性能,如下所示:
var subVModel =
(
from ps in db.ProjectSubmission
.Include(s => s.Project)
where ps.IsActive
&& (filter.ProjectId == Guid.Empty || ps.Project.ProjectId == filter.ProjectId)
&& (filter.SubmissionTitle == string.Empty || ps.SubmissionTitle .Contains(filter.SubmissionTitle))
select ps);
或:
现在,它们都会导致16条记录的时间为.032秒。简单的情况下没有区别,因为
Include
调用会生成一个join子句来从included属性获取数据。另一方面,如果只想从Include导航属性中选择某些列,则无法使用Include进行选择。如果使用join,则可以指定要在结果集中包含哪些列。简单的情况下没有区别,因为include
调用会生成一个join子句以从included属性获取数据。另一方面,如果只想从Include导航属性中选择某些列,则无法使用Include进行选择。如果使用join,则可以指定要在结果集中包含哪些列。虽然包含的语法更简单,但在简单情况下没有区别。
但在某些情况下,包括导致额外联接(在EF 6.1之前)。并造成额外的时间。这是EF中的一个bug,已报告
无论如何,最好使用EF分析器并监视您的查询。Like或use虽然include的语法更简单,但在简单的情况下没有区别。 但在某些情况下,包括导致额外联接(在EF 6.1之前)。并造成额外的时间。这是EF中的一个bug,已报告
无论如何,最好使用EF分析器并监视您的查询。喜欢,或者使用“现在16条记录都需要0.032秒”-添加10000条记录,然后重新执行。您的结果是什么?“现在,16条记录的结果都是0.032秒”-添加10000条记录,然后重新执行。你的结果是什么?
var subVModel =
(
from ps in db.ProjectSubmission
join p in db.Project on ps.ProjectId equals p.ProjectId
where ps.IsActive
&& (filter.ProjectId == Guid.Empty || p.ProjectId == filter.ProjectId)
&& (filter.SubmissionTitle == string.Empty || ps.SubmissionTitle .Contains(filter.SubmissionTitle))
select ps);