2017-02-10 5 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

に.Artistプロパティを使用します。 Map/Reduceインデックスは何を使用していますか? 'GroupBy(x => x)' –

+0

私はgroupbyを使って重複を取り除いています:)おそらくカンニングです。 – FaNIX

答えて

1

ソリューション:私はSelectManyは匿名型を返すように減らし変更し、私はあなたがグループ化されていません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); 
} 
関連する問題