2010-03-05 30 views
2

J'essaie d'utiliser NHibernate.Search pour obtenir Lucene.NET Score grâce à des projections.NHibernate.Search Projections

Mon objet domaine implémente une IScorableEntity d'interface

public interface IScorableEntity 
{ 
    float Score { get; set; } 
} 

...

IFullTextSession session = Search.CreateFullTextSession(database.Session); 
IFullTextQuery textQuery = session.CreateFullTextQuery(query, typeof(Book)); 
textQuery.SetProjection(ProjectionConstants.SCORE); 
var books = textQuery.List<Book>(); 

Sans la projection de score tout fonctionne, mais il a eu une exception:

InvalidCastException: Au moins un élément dans le tableau source n'a pas pu être . être donné au tableau de destination type.

Répondre

1

me retrouvais, je dois utiliser 2 projections pour cette

textQuery.SetProjection(ProjectionConstants.SCORE, ProjectionConstants.THIS); 

var list = textQuery.List(); 

var books = new List<Book>(); 
foreach(object[] o in list) 
{ 
    var book= o[1] as Book; 
    if (book!= null) 
    { 
     book.Score = (float)o[0]; 
    } 
    books.Add(book); 
} 

return books;