2015-12-15 214 views
0

我有一个相当复杂的查询,将从表中读取,然后做CONTACT_ID组,然后选择只有那些计数为1的组。如何优化LINQ-2-SQL表达式?

此查询相当复杂,我不知道如何优化它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); 

回答

0

我做了较短的版本,但我不认为它会更快。如果它的工作原理并不慢,我会满意的:

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