سؤال

دعونا نقول لدي كثير إلى كثير من العلاقة (باستخدام ActiveRecord السمة HasAndBelongsToMany) بين وظائف فئة (كائن المجال تم تغيير الاسم لحماية الأبرياء) وأردت طريقة مثل

FindAllPostByTags(IList<Tag> tags)
أن يعود جميع المشاركات التي تحتوي على كافة (وليس بعض) العلامات في المعلمة.على أية حال أنا يمكن إنجاز هذا إما مع NHibernate تعبيرات أو HQL?لقد بحثت من خلال HQL الوثائق و لم أستطع العثور على أي شيء يناسب احتياجات بلدي.أتمنى أن أنا في عداد المفقودين شيء واضح!

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

المحلول

يمكن أيضا استخدام IN بيان

DetachedCriteria query = DetachedCriteria.For<Post>();
query.CreateCriteria("Post").Add(Expression.In("TagName",  string.Join(",",tags.ToArray()) );

لم بتجميع أن ذلك يمكن أن تحتوي على أخطاء

نصائح أخرى

لا يوجد نظام في متناول اليد مع القلعة تثبيت الآن لذا لم الاختبار أو ترجمة هذا ، ولكن البرمجية أدناه عن أن تفعل ما تريد.

Junction c = Expression.Conjunction();
foreach(Tag t in tags)
    c = c.Add( Expression.Eq("Tag", t);

return sess.CreateCriteria(typeof(Post)).Add(c).List();

أنا فقط كان عندي نفس المشكلة و حاولت قراءة HQL-الوثائق ، ولكن بعض الميزات لا يبدو أن يكون تنفيذها في NHibernate (مع-الكلمات الرئيسية على سبيل المثال)

انتهى بي الأمر مع هذا النوع من الحل:

select p 
FROM Post p
JOIN p.Tags tag1
JOIN p.Tags tag2
WHERE
    tag1.Id = 1
    tag2.Id = 2

معنى حيوي في بناء HQL باستخدام الانضمام لكل الوسم ، ثم جعل الاختيار في جملة WHERE.هذا عملت بالنسبة لي.حاولت أن تفعل الشيء نفسه مع DetachedCriteria لكن واجهت مشكلة عند محاولة الانضمام إلى الجدول عدة مرات.

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