Ich bin NHibernate, und versuche herauszufinden, wie man eine Abfrage schreibt, die alle Namen meiner Entitäten, sucht und listet die Ergebnisse auf. Als ein einfaches Beispiel habe ich die folgenden Objekte;NHibernate Abfrage über mehrere Tabellen
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 möchte ich eine Abfrage erstellen, zum Beispiel sagen, das und gibt alle Besitzer von Haustieren mit einem Namen „ted“ oder Haustiere mit einem Namen mit „ted“ enthalten. Hier
ist ein Beispiel für die SQL I ausgeführt werden soll:
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 Kriterien wie folgt aus:
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 generiert wird:
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 OR anstelle von t generieren er UND?
danke für Ihre Hilfe.
Danke, das schien es zu tun. Ich habe einen Beitrag hier gefunden: http://matthr.blogspot.com/2010/02/quey-across-join-in-nibernate.html und wollte das versuchen –