سؤال

إذا كان لدي استعلام مسمى بسيط تم تحديده، فسيتم إنشاء دالة العد في عمود واحد:

  <query name="Activity.GetAllMiles">
    <![CDATA[
      select sum(Distance) from Activity
    ]]>

  </query>

كيف يمكنني الحصول على نتيجة مجموع أو أي استعلام لا يُرجع أحد الكيانات المعينة، مع استخدام NHibernate إما IQuery أو ICriteria؟

هذه محاولتي (لا أستطيع تجربتها الآن)، هل ستنجح؟

    public decimal Find(String namedQuery)
    {
        using (ISession session = NHibernateHelper.OpenSession())
        {
            IQuery query = session.GetNamedQuery(namedQuery);


            return query.UniqueResult<decimal>();
        }
    }
هل كانت مفيدة؟

المحلول 2

آسف!لقد أردت في الواقع الحصول على مبلغ، وليس إحصاء، وهو ما يفسر الكثير.لقد قمت بتحرير المنشور وفقًا لذلك

هذا يعمل بشكل جيد:

var criteria = session.CreateCriteria(typeof(Activity))
                          .SetProjection(Projections.Sum("Distance"));
   return (double)criteria.UniqueResult();

لا يزال أسلوب الاستعلام المسمى يموت، "أخطاء في الاستعلامات المسماة:{النشاط.GetAllMiles}":

 using (ISession session = NHibernateHelper.OpenSession())
            {
                IQuery query = session.GetNamedQuery("Activity.GetAllMiles");


                return query.UniqueResult<double>();
            }

نصائح أخرى

كإجابة غير مباشرة على سؤالك، إليك كيفية القيام بذلك دون استعلام مسمى.

var session = GetSession();
var criteria = session.CreateCriteria(typeof(Order))
            .Add(Restrictions.Eq("Product", product))
            .SetProjection(Projections.CountDistinct("Price"));
return (int) criteria.UniqueResult();

أعتقد أنه في المثال الأصلي، تحتاج فقط إلى الاستعلام.UniqueResult();سيعود العد عددا صحيحا.

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