ฉันกำลังพัฒนาบริการที่ใช้ข้อมูล CRM 2011 ผ่านเอนทิตีแบบไดนามิก (เช่นใน Microsoft.Xrm.Sdk.Entity ซึ่งเป็นวิธีการผูกล่าช้า) ฉันจงใจไม่ใช้วิธี Xrm.cs (การเชื่อมโยงตั้งแต่เนิ่นๆ) เพื่อพยายามทำให้โซลูชันของฉันเป็นแบบทั่วไป
นอกจากนี้ ฉันต้องการหลีกเลี่ยงการเชื่อมต่อกับฐานข้อมูล CRM โดยตรง (เช่น EDMX) เนื่องจากจะทำให้โซลูชันของฉันไม่สามารถใช้งานได้กับ CRM ที่โฮสต์ไว้ (เช่น ไม่มีการเข้าถึง DB โดยตรง)
ฉันมีข้อกำหนด (แบบง่าย) ต่อไปนี้ ฉันกำลังดิ้นรนกับเกณฑ์การคัดเลือก:
สุ่ม 7% ของบันทึก จำเป็นต้องเลือก (และอัปเดต)
ใน SQL เกณฑ์การคัดเลือกจะค่อนข้างง่าย - ฉันรู้วิธีเลือกเปอร์เซ็นต์ของระเบียนแบบสุ่ม สิ่งที่ต้องการ:
SELECT TOP 7 PERCENT * FROM
(
SELECT TOP 1000 NEWID() AS Foo, [someColumns]
FROM [someTable]
)
AS Bar ORDER BY Bar.Foo ASC
มันทำงานได้อย่างสมบูรณ์แบบ ฉันรวบรวม LINQ ที่เทียบเท่ากันเป็นดังนี้:
from e in someEntities
orderby Guid.NewGuid()
select e;
มีปัญหาเกิดขึ้น ฉันไม่รู้วิธีใช้ LINQ กับเอนทิตีไดนามิก CRM 2011 แต่กลับยืนยันที่จะใช้คลาส/ไวยากรณ์ QueryExpression ที่จำกัดหรือ fetchXML ดังที่เห็นใน หน้านี้ (MSDN)
ฉันได้ระบุตัวเลือกต่อไปนี้เพื่อให้เป็นไปตามข้อกำหนดนี้:
ใช้เอนทิตีแบบไดนามิก ส่งกลับบันทึกทั้งหมดที่ตั้งไว้ในรายการ จากนั้นเลือกการเลือกแบบสุ่มตามดัชนี อย่างไรก็ตาม สิ่งนี้เกี่ยวข้องกับการส่งคืนบันทึกมากถึง 10,000 รายการผ่านบริการข้อมูลอินเทอร์เน็ต ซึ่งอาจช้า/ไม่ปลอดภัย/อื่นๆ
ใช้คำสั่ง fetchXML น่าเสียดายที่ฉันไม่รู้จัก fetchXML ดังนั้นฉันจึงไม่รู้ว่าสามารถทำสิ่งต่างๆ เช่น COUNT, TOP, PERCENT หรือ NEWID() ได้หรือไม่
ใช้ Xrm.cs และ LINQ หรือใช้ Stored Procedure หรือมุมมอง SQL ตัวเลือกทั้งหมดเหล่านี้หมายถึงการเชื่อมโยงโซลูชันเข้ากับการเชื่อมต่อฐานข้อมูลโดยตรงและ/หรือการเชื่อมโยงตั้งแต่เนิ่นๆ ซึ่งไม่เป็นที่ต้องการ
ปฏิเสธลูกค้า
คำแนะนำใด ๆ ที่จะได้รับการชื่นชมอย่างมาก! fetchXML สามารถทำการสืบค้นนี้ได้หรือไม่ มีวิธีที่ดีกว่าในการทำเช่นนี้หรือไม่?