Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Linq中,哪个更有效,是join还是include_C#_Linq - Fatal编程技术网

C# 在Linq中,哪个更有效,是join还是include

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;

我试图得到一个对象集合,我想找出哪个更有效。现在我的查询得到16个结果,但我们可能正在处理1000个数据集

假设我正在使用以下模型:

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);