NHibernate Query über mehrere Tabellen

Ich verwende NHibernate und versuche herauszufinden, wie eine Abfrage geschrieben wird, die alle Namen meiner Entitäten durchsucht und die Ergebnisse auflistet. Als einfaches Beispiel habe ich die folgenden Objekte:

public class Cat {
public string name {get; set;}
}

public class Dog {
    public string name {get; set;}
}

,public class Owner {
    public string firstname {get; set;}
    public string lastname {get; set;}
}

Eventaully Ich möchte beispielsweise eine Abfrage erstellen, die alle Haustierbesitzer mit einem Namen zurückgibt, der "ted" enthält, ODER Haustiere mit einem Namen, der "ted" enthält.

Hier ist ein Beispiel für die SQL, die ich ausführen möchte:

SELECT TOP 10 d.*, c.*, o.* FROM owners AS o
INNER JOIN dogs AS d ON o.id = d.ownerId 
INNER JOIN cats AS c ON o.id = c.ownerId
WHERE o.lastname like '%ted%' 
OR o.firstname like '%ted%' 
OR c.name like '%ted%' 
OR d.name like '%ted%' 

Wenn ich es mit Kriterien wie folgt mache:

    var criteria = session.CreateCriteria<Owner>()
        .Add(
        Restrictions.Disjunction()
            .Add(Restrictions.Like("FirstName", keyword, MatchMode.Anywhere))
            .Add(Restrictions.Like("LastName", keyword, MatchMode.Anywhere))
        )
        .CreateCriteria("Dog").Add(Restrictions.Like("Name", keyword, MatchMode.Anywhere))
        .CreateCriteria("Cat").Add(Restrictions.Like("Name", keyword, MatchMode.Anywhere));
        return criteria.List<Owner>();

Die folgende Abfrage wird generiert:

   SELECT TOP 10 d.*, c.*, o.* FROM owners AS o
   INNER JOIN dogs AS d ON o.id = d.ownerId 
   INNER JOIN cats AS c ON o.id = c.ownerId 
   WHERE o.lastname like '%ted%' 
   OR o.firstname like '%ted%' 
   AND d.name like '%ted%'
   AND c.name like '%ted%'

Wie kann ich meine Abfrage so anpassen, dass die .CreateCriteria ("Dog") und .CreateCriteria ("Cat") ein ODER anstelle des UND generieren?

danke für Ihre Hilfe

Antworten auf die Frage(2)

Ihre Antwort auf die Frage