Mit Linq zu NHibernate (NHibernate v3) Ich habe die folgende LINQ-Abfrage:Problem überspringen und Nehmen in NHibernate 3 Linq Abfrage
var session = this.GetSession();
var rgn = this.Get(regionId);
var query = from t in session.Query<Tag>()
where
!(
from trn in session.Query<Translation>()
where trn.Region.Id == regionId
select trn.Tag.Id
)
.Contains(t.Id)
select new Translation() {Id = t.Id, Tag = t, Region = rgn, TagTranslation=""};
var count = query.Count();
var untranslatedTags = query.Skip((page - 1)*pageSize).Take(pageSize);
var countAfterSkipAndTake = untranslatedTags.Count();
return untranslatedTags.ToList();
}
die Zählvariable in der Tat den erwarteten Wert zurückgibt. Allerdings gibt countAfterSkipAndTake den gleichen Wert zurück. Ich hätte erwartet, dass es pageSize zurückgibt (was in diesem Fall 15 ist). Die letzte Zeile untranslatedTags.ToList() gibt eine Ausnahme zurück. Ich glaube, dass LINQ zu NHibernate nicht vollständig implementiert ist, bevor ich versuche, den Kofferraum herunterzuladen, kann irgendjemand etwas Offensichtliches sehen, das ich falsch gemacht habe.
ist. Nach dem Ausprobieren aller möglichen Dinge sieht es so aus, als ob die LINQ-Implementierung von NHibernate die Auswahlprojektion nicht mag. Ich habe meine LINQ-Anweisung aktualisiert, um das Überspringen und Take einzufügen, und die Auswahlprojektion durch einen einfachen select() -Aufruf ersetzt und es hat funktioniert. In einer anderen Erklärung wollte ich den Unionsbetreiber verwenden, aber ich bekomme eine Ausnahme, die besagt, dass der Gewerkschaftsbetreiber noch nicht implimiert ist. Es scheint, als ob LINQ zu NHibernate immer noch einige Probleme hat. –