เกณฑ์ Nhibernate เข้าร่วมกับหลายเงื่อนไข

ดูเหมือนว่าฉันไม่สามารถหาคำตอบที่ชัดเจนสำหรับปัญหาได้ ฉันหวังว่าจะมีคนสามารถช่วยฉันได้ที่นี่

ข้อความค้นหาตัวอย่าง:

select * from A a inner join B b on a.Id = b.Id Or a.Date = b.Date

โดยพื้นฐานแล้ว ฉันต้องการทราบว่าเป็นไปได้หรือไม่ที่จะใช้ส่วนที่สองของเงื่อนไขการรวมโดยใช้เกณฑ์ และหากเป็นไปได้ จะต้องทำอย่างไร หากใครสามารถกรุณาแจ้งให้เราทราบ มันจะดีมาก! ขอบคุณมากมาย!


person Akey    schedule 26.11.2009    source แหล่งที่มา


คำตอบ (3)


อาจเป็นเช่นนั้น แต่ข้อความค้นหานั้นชัดเจนกว่าที่เขียนด้วย HQL:

select a from A a, B b where a.Id = b.Id or a.Date = b.Date

อย่างที่คุณเห็น มันเกือบจะเหมือนกับ SQL

person Diego Mijelshon    schedule 26.11.2009
comment
แม้ว่าฉันจะไม่สามารถใช้ HQL ได้อย่างแน่นอนเนื่องจากมี wrapper แบบกำหนดเองบางตัวที่เราใส่เข้าไปเพื่อแก้ไขผลลัพธ์ แต่มันก็ทำให้ฉันรู้วิธีเปลี่ยนวิธีการสืบค้น ขอบคุณที่สละเวลาตอบคำถามของฉัน! - person Akey; 27.11.2009

น่าเสียดายที่คุณไม่สามารถกำหนดไวยากรณ์ ANSI ร่วมกับ NHibernate ได้ ด้วย NH2 ขึ้นไป คุณสามารถกำหนดพวกมันบน HQL โดยใช้คำสั่ง WITH และฉันพูดอย่างนั้น เพราะถ้าคุณใช้โซลูชันของ Diego คุณจะต้องตั้งค่ารูปแบบ ISNULL OR ในการสืบค้นของคุณหากคุณต้องการดำเนินการรวมหลายรายการ

person Jaguar    schedule 30.11.2009

หากต้องการเพิ่มเงื่อนไข ให้ใช้นิพจน์ สำหรับการแยก OR จะซับซ้อนน้อยกว่าหากคุณใช้ Expresion.In

session.CreateCriteria(typeof(A), "a").CreateCriteria("B", "b", NHibernate.SqlCommand.JoinType.FullJoin)
                             .Add(Expression.Eq("a.Date", a.Date))
                             .Add(Expression.Eq("b.Date", b.Date))
person mugume david    schedule 30.01.2013