سؤال

هل هناك طريقة للحصول على قائمة مرتبة حسب حقلين، قل الأسماء الأخيرة والأولى؟

أنا أعرف .listOrderByLastAndFirst و .list(sort:'last, first') لن ينجح.

هل كانت مفيدة؟

المحلول

هذا الحل القديم لم يعد يعمل.يرجى الاطلاع على إجابة mattlary أدناه

قد يتعين عليك كتابة مكتشف مخصص في HQL أو استخدام Criteria Builder.

MyDomain.find("from Domain as d order by last,first desc")

أو

def c = MyDomain.createCriteria()
def results = c.list {
       order("last,first", "desc")
}

نصائح أخرى

Hates_ معايير الجواب لا يبدو أن العمل بالنسبة لي. ووضع "last,first" من أجل تتسبب فقط استثناءات قائلا "Property 'last,first' not found". لطلب على حقلين، يمكنك القيام بما يلي:

def c = MyDomain.createCriteria()
def results = c.list {
    and{
       order('last','desc')
       order('first','desc')
    }
}

وهذه هي قديمة جدا ولكن ساعدني في العثور على حل مناسب. A "أنظف" مثال التعليمات البرمجية باستخدام withCriteria الاختصار:

def c = MyDomain.withCriteria {
    and {
        order('last', 'desc')
        order('first', 'desc')
    }
}

ومعايير ترتيب أكثر تعقيدا، (اختبار في الكؤوس المقدسة 2.1.0)

def c = MyDomain.withCriteria {
    property {
        order('last', 'desc')
    }
    order('first', 'desc')
}

وأنواع أولا ثم MyDomain.property.last التي كتبها MyDomain.first

ويعمل هذا الاستعلام على أساس الحقل الأول. عندما يكون الحقل الأول فارغ ثم قلل من قبل الحقل الثاني.

order('last','desc')
order('first','desc')

وأعتقد أن المعايير هو أفضل رهان، ولكن يمكنك فعل الشيء الصحيح من خلال محاولة مكتشف أولا. عند استرداد كائنات المجال من GORM، والترتيب الصحيح لجعل محاولة هو: مكتشف الحيوية، المعايير، HQL

ويمكنك القيام بذلك

def results=MyDomain.findAll([sort:"last",order:'desc'],[sort:"first",order:'desc']);

وهذا سطر من التعليمات البرمجية سوف أولا فرز نتائج من الدرجة نطاق "MYDOMAIN" أولا حسب الاسم الأخير ثم حسب الاسم الأول للشخص.

MyDomain.findAll(sort: ['first': 'desc','last':'desc'])

ويعمل مع الكؤوس المقدسة، مخزن البيانات، GORM: 6.0.3

إذا كنت تقوم بفرز القوائم بناءً على محتويات عناصرها، فستحتاج إلى تطبيق مقارنة تحتوي على بعض الذكاء لتمكينك من تحديد ترتيب الفرز بناءً على خصائص متعددة.

يتم عرض بعض الأمثلة على مقارنات أسلوب Groovy هنا

ومع ذلك، إذا تم إرجاع القائمة التي تقوم بفرزها من استعلام قاعدة بيانات، فمن الأفضل فرزها باستخدام CrteriaQuery والفرز على ذلك

وأنا لديها نفس المشكلة. منذ قائمتي ليست كبيرة جدا، وأنا استخدم نوع رائع، كما أريد لفرز على حقول المجال المرتبط: CalendarData -> الجذب

def listCalendar (Calendar calendar) {
    respond CalendarData.where {
        calendar == calendar
    }.list().sort{ "$it.attraction.type?:' '$it.attraction.name" }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top