In Ordnung, lange Zeit Hörer, zum ersten Mal Anrufer.Queryover - QueryOver mit Eigenschaft und Eigenschaft der Referenz in der gleichen Disjunktion
Ich versuche, eine Abfrage mithilfe der QueryOver API zu erstellen, die nach einer Anzahl von Begriffen über bestimmte Eigenschaften meiner Entität sucht. Das Problem besteht darin, dass einige dieser Eigenschaften Verweise auf eine andere Entität sind. Ich muss jedoch immer noch nach dem gegebenen Begriff in einer Eigenschaft dieser Referenz suchen.
Ich möchte in der Lage sein, etwas wie den Code unten zu schreiben. Im folgenden Code sind FirstName, MiddleName und LastName grundlegende Zeichenfolgeneigenschaften für die Entität Person. Die Eigenschaft Abteilung ist eine Referenzeigenschaft des Typs Abteilung. Die Abteilung Entität hat drei Eigenschaften: ID, Wert, Beschreibung. Es ist Person.Department.Value, der mit den Grundeigenschaften auch nach dem gegebenen Begriff gesucht werden muss.
var queryOver = session.QueryOver<Person>();
foreach (string term in searchTerms)
{
queryOver = queryOver.Where(Restrictions.On<Person>(x => x.FirstName).IsInsensitiveLike(term, MatchMode.Anywhere) ||
Restrictions.On<Person>(x => x.LastName).IsInsensitiveLike(term, MatchMode.Anywhere) ||
Restrictions.On<Person>(x => x.MiddleName).IsInsensitiveLike(term, MatchMode.Anywhere) ||
//This following line doesn't work.
Restrictions.On<Person>(x => x.Department.Value).IsInsensitiveLike(term, MatchMode.Anywhere)
}
habe ich versucht, mit Alias-Namen und mit dem NHibernate.Linq/Query-API. Ich weiß, dass ich mich mit einem Alias verbinden muss, aber ich glaube, ich verstehe nicht alle Fragen/Artikel, die ich gelesen habe. Die meisten von ihnen scheinen über eine Abfrage/Unterabfrage gegen die Referenz oder Child zu sprechen, aber ich habe Probleme, diese Abfragen in eine Abfrage neben anderen Eigenschaften zu übersetzen und sie alle zusammen zu ordern.
Die letzte SQL ich für etwas ist wie das Schießen bin:
SELECT *
FROM `persons`
WHERE (`FirstName` LIKE '%term1%' OR
`LastName` LIKE '%term1%' OR
`MiddleName` LIKE '%term1%' OR
`Department`.`Value` LIKE '%term1%') AND //I know this won't work
(`FirstName` LIKE '%term2%' OR
`LastName` LIKE '%term2%' OR
`MiddleName` LIKE '%term2%' OR
`Department`.`Value` LIKE '%term2%') AND etc...
Schließlich vielen Dank im Voraus für jede Hilfe. Ich bin offen für die Verwendung einer anderen API in NHibernate oder sogar eine andere Suchstrategie, wenn Sie denken, dass ich die gleichen Ergebnisse mit einer anderen Abfrage erzielen kann.