การส่งคืน IQueryable กับ ObjectQuery เมื่อใช้ LINQ ไปยังเอนทิตี

ฉันได้อ่านเมื่อใช้ LINQ เพื่อระบุแบบสอบถามที่เป็นประเภท IQueryable ก่อนที่จะได้รับการประมวลผล แต่เมื่อแบบสอบถามได้รับการประมวลผลแล้ว ก็จะไม่ใช่ IQueryable อีกต่อไป แต่เป็น ObjectQuery

ในกรณีนั้น การเขียนวิธีการจากเลเยอร์ของฉัน (เลเยอร์พื้นที่เก็บข้อมูล) เพื่อส่งคืน IQueryable ถูกต้องหรือไม่

ฉันจำเป็นต้องแคสต์หรือไม่?

เหตุใดฉันจึงต้องการส่งคืน ObjectQuery

ฉันมาจากพื้นหลัง LINQ ถึง SQL ซึ่งสิ่งต่าง ๆ อยู่เสมอ IQueryable แต่ดูเหมือนว่า EF จะเปลี่ยนแปลงสิ่งนี้

ความช่วยเหลือใด ๆ ที่ชื่นชมจริงๆ




คำตอบ (1)


ที่เก็บของฉันส่งคืน IQueryable เสมอ เหตุผลก็คือ IQueryable ไม่ได้ขึ้นอยู่กับ EF ในขณะที่ ObjectQuery เป็น ดังนั้นหากฉันต้องการให้เลเยอร์อื่น ๆ ของฉันมีความคงอยู่โดยไม่รู้ตัว ฉันไม่ต้องการที่จะแนะนำการพึ่งพา ObjectQuery

ObjectQuery คือการนำ IQueryable ไปใช้พร้อมคุณสมบัติเพิ่มเติมหลายประการ คุณลักษณะแรกที่คุณจะค้นพบได้อย่างรวดเร็วคือฟังก์ชันรวมซึ่งจำเป็นสำหรับการโหลดคุณสมบัติการนำทางอย่างกระตือรือร้น (เอนทิตีที่เกี่ยวข้อง) คุณสมบัติที่สองคือ EQL - ภาษาคิวรีเอนทิตี EQL เป็นวิธีที่สองในการสืบค้นแบบจำลองแนวความคิดของคุณ มีไวยากรณ์คล้ายกับ SQL คุณสามารถเขียนแบบสอบถามแบบง่ายเป็นสตริง ส่งผ่านไปยังตัวสร้าง ObjectQuery และดำเนินการค้นหาหรือใช้ใน Linq-To-Entities

person Ladislav Mrnka    schedule 04.09.2010
comment
ขอบคุณ .. ตกลง iqueryable แล้ว :-) ... ฉันไม่คิดว่าฉันต้องการคุณสมบัติขั้นสูงใด ๆ ของ objectquery ... ฉันจำเป็นต้องส่ง .. จาก linq ไปจนถึงการสืบค้นเอนทิตีมันเป็น objectquery ที่ส่งคืน... ดังนั้นเมื่อฉันส่งคืนอ็อบเจ็กต์จากวิธีการของฉัน .. ฉันจำเป็นต้องส่งหรืออะไร? ขอบคุณอีกครั้ง - person mark smith; 05.09.2010
comment
ขอบคุณมาก! สิ่งที่ฉันต้องการ! - person mark smith; 05.09.2010