2017-02-10 33 views
1

我目前正在將我們的解決方案從RavenDB 2.5升級到3.5,但在創建索引時出現以下異常:看起來它與group byRavenDB升級:2.5至3.5 - 無法編譯索引

IndexCreation.CreateIndexes(typeof(RavenGuid).Assembly, store); 

索引定義

public RecordingArtistTypeaheadIndex() 
{ 
    Map = docs => docs.Select(x => new Definition { Artist = x.ArtistDisplayName }); 

    Reduce = results => results.SelectMany(r => r.Artist.Split('|')).GroupBy(x => x).Select(g => new Definition { Artist = g.Key }); 

    Store(x => x.Artist, FieldStorage.Yes); 

    Index(x => x.Artist, FieldIndexing.Analyzed); 
} 

異常消息

Compilation Errors: 

Line 40, Position 11: Error CS1525 - Invalid expression term 'by' 
Line 40, Position 14: Error CS0745 - Expected contextual keyword 'by' 

的源代碼

public class Index_RecordingArtistTypeaheadIndex : Raven.Database.Linq.AbstractViewGenerator 
{ 
    public Index_RecordingArtistTypeaheadIndex() 
    { 
     this.ViewText = @"from x in docs.RepertoireResources 
          select new { 
           Artist = x.ArtistDisplayName 
          } 
          from x in results.SelectMany(r => r.Artist.Split(new char[] {'|'})) 
          group x by x into g 
          select new { 
           Artist = g.Key 
          }"; 

     this.ForEntityNames.Add("RepertoireResources"); 

     this.AddMapDefinition(docs => 
      from x in ((IEnumerable<dynamic>)docs) 
      where string.Equals(x["@metadata"]["Raven-Entity-Name"], "RepertoireResources", System.StringComparison.InvariantCultureIgnoreCase) 
      select new { 
       Artist = x.ArtistDisplayName, 
       __document_id = x.__document_id 
      }); 

     this.ReduceDefinition = results => 
      from x in results.SelectMany((Func<dynamic, IEnumerable<dynamic>>)(r => (IEnumerable<dynamic>)(r.Artist.Split(new char[] { 
       '|' 
      })))) 
      group by x into g 
      select new { 
       Artist = g.Key 
      }; 

     this.GroupByExtraction = x => x; 
     this.AddField("Artist"); 
     this.AddQueryParameterForMap("ArtistDisplayName"); 
     this.AddQueryParameterForMap("__document_id"); 
     this.AddQueryParameterForReduce("ArtistDisplayName"); 
     this.AddQueryParameterForReduce("__document_id"); 
    } 
} 

有沒有人碰到這個纔來的?

+0

您還沒有分組。你使用Map/Reduce索引的是什麼? 'GroupBy(x => x)' –

+0

我使用groupby刪除重複:)也許是一個騙子。 – FaNIX

回答

1

解決方案:我改變了降低,以使返回的SelectMany匿名類型,然後我用.Artist屬性在的GroupBy

public RecordingArtistTypeaheadIndex() 
{ 
    Map = docs => docs.Select(x => new Definition 
    { 
     Artist = x.ArtistDisplayName 
    }); 

    Reduce = results => results 
     .SelectMany(r => r.Artist.Split('|'), (x, y) => new Definition { Artist = y }) 
     .GroupBy(x => x.Artist) 
     .Select(g => new Definition 
     { 
      Artist = g.Key 
     }); 

    Store(x => x.Artist, FieldStorage.Yes); 

    Index(x => x.Artist, FieldIndexing.Analyzed); 
}