2017-03-06 3 views
0

Ich verwende folgenden Code, um das Ergebnis aus dem Lucene-Index zu erhalten.So verwenden Sie DbFunctions in IQueryable für Lucene Indexsuche

using (var context = ContentSearchManager.GetIndex("my_profile_index").CreateSearchContext()) 
    { 
     IQueryable<ProfileSearchItem> query = from profile in context.GetQueryable<ProfileSearchItem>() 
               where profile.LastName.Equals("Zafar") 
               let diffYears = DbFunctions.DiffYears(profile.Birthdate, DateTime.Today) 
               select profile; 
     return query.ToList(); 
    } 

ich Ausnahme wegen DbFunctions.DiffYears:

Exception Details: System.MissingMethodException: No parameterless constructor defined for this object. 

ich genau einen Datensatz, wenn ich nicht die DbFunctions in obiger Abfrage verwenden. Ich würde gerne wissen, wie man DbFunctions beim Durchsuchen von Indizes verwendet. Dies ist nur eine Beispielabfrage, mein einziges Ziel ist wie im Titel erwähnt.

ProfileSearchItem Klasse:

public class ProfileSearchItem 
    { 
     [IndexField("_group")] 
     public string ItemId { get; set; } 

     [IndexField("_language")] 
     public string Language { get; set; } 

     [IndexField("birthdate")] 
     public DateTime Birthdate { get; set; } 

     [IndexField("first_name")] 
     public string FirstName { get; set; } 

     [IndexField("last_name")] 
     public string LastName { get; set; } 
    } 

Antwort

0

Ich glaube nicht, dass die Abfrage mag Funktionen im Inneren und mit der Abfrage-Parser versucht, diese in etwas zu konvertieren.

In Ihrem Fall könnten Sie einfach die Berechnung von Jahren Unterschied nach der Abfrage auf dem POCO tun.

Haben Sie eine Eigenschaft auf Ihrem ProfileSearchItem POCO;

public int YearsDifference { get { return Datetime.Now.Year - Birthdate.Year;} } 
0

Die Datumsfelder werden als String in Lucene gehalten wie 20.170.308 so viele der Daten Methoden werden nicht einmal Einfältigen funktionieren wie zu vergleichen [Datefield] .year also denke ich, die DbFunctions.DiffYears einige Lambda-Ausdrücke tut und Verwenden der date-Methode zum Auffüllen des Ergebnisses.

Werfen Sie einen Blick auf https://ggullentops.blogspot.com.au/2015/12/sitecore-lucene-index-and-datetime.html und Sie könnten eine bessere Sicht bekommen

Verwandte Themen