معايير nhibernate للاستعلام عن كائنات الوالدين مع كائن طفل واحد على الأقل؟

StackOverflow https://stackoverflow.com/questions/1807135

سؤال

في مشروعي ، Lines يمكن تجميعها و Group لديه نوع يمكن أن يكون إما Crossing (1) أو Parallel (2). أحتاج إلى العثور على جميع الخطوط التي لديها مجموعة واحدة على الأقل من نوع محدد (في هذه الحالة ، 1). يمكن أن يكون معرف السطر المعطى إما على العمود LineA أو LineB من مجموعة. هنا حيث وصلت حتى الآن:

Criteria crit = session.CreateCriteria(typeof(Line), "ln");

DetachedCriteria count = DetachedCriteria.For<Group>()
.SetProjection(Projections.CountDistinct("Id"))
.Add(Expression.Or(
    Expression.EqProperty("LineA", "ln.Id"),
    Expression.EqProperty("LineB", "ln.Id")))
.Add(Expression.Eq("GroupTypeId", 1));

crit.Add(Subqueries.Gt(0, count));
هل كانت مفيدة؟

المحلول

لقد عملت!

crit.Add(Expression.Sql(
  "EXISTS(select 1 from Group" +
  "WHERE ({alias}.Id=LineA OR {alias}.Id=LineB)"+
    "AND GroupTypeId = ?)", (int) type, NHibernateUtil.Int32));

{alias} هو عنصر نائب للكائن الذي يتم الاستعلام عنه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top