Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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-2-SQL表达式?_C#_Linq_Sql Server 2008 - Fatal编程技术网

C# 如何优化LINQ-2-SQL表达式?

C# 如何优化LINQ-2-SQL表达式?,c#,linq,sql-server-2008,C#,Linq,Sql Server 2008,我有一个相当复杂的查询,它将从一个表中读取,然后根据联系人ID进行分组,然后只选择那些计数为1的组 这个查询相当复杂,我不知道如何在LINQ中优化它 var linkTable = this.DB.Links .Where(l=>l.INSTANCE_ID==123456 && l.CONTACT_ID.HasValue && l.ORGANISATION_ID.HasValue) .Select(l => ne

我有一个相当复杂的查询,它将从一个表中读取,然后根据联系人ID进行分组,然后只选择那些计数为1的组

这个查询相当复杂,我不知道如何在LINQ中优化它

    var linkTable = this.DB.Links
        .Where(l=>l.INSTANCE_ID==123456 && l.CONTACT_ID.HasValue && l.ORGANISATION_ID.HasValue)
        .Select(l => new { l.DEFAULT_LINKED_ORGANISATION, l.LINK_ID, l.CONTACT_ID });

    var defaultOrganizationLinkQuery = linkTable
        .Where(l => l.DEFAULT_LINKED_ORGANISATION)
        .Select(l => l.LINK_ID);

    var singleOrganizationLinkQuery = linkTable
        .GroupBy(l => l.CONTACT_ID)
        .Select(group => new
        {
            CONTACT_ID = group.Key,
            contact_link_count = group.Count(),
            LINK_ID = group.First().LINK_ID
        })
        .Where(l => l.contact_link_count == 1)
        .Select(l => l.LINK_ID);

    var merged = singleOrganizationLinkQuery.Union(defaultOrganizationLinkQuery);

我制作了更短的版本,但我不希望它更快。如果它工作正常且速度不慢,我会感到满意:

 var merged = this.DB.Links
        .Where(l=>l.INSTANCE_ID==123456 && l.CONTACT_ID.HasValue && l.ORGANISATION_ID.HasValue)
        .GroupBy(l => l.CONTACT_ID)
        .SelectMany(s => s.Where(x => s.Count() == 1 || x.DEFAULT_LINKED_ORGANISATION)
                          .Select(link => link.LINK_ID));