Saya sedang mengembangkan layanan yang menggunakan data CRM 2011 melalui entitas dinamis (seperti pada Microsoft.Xrm.Sdk.Entity, metode pengikatan akhir). Saya sengaja tidak menggunakan metode Xrm.cs (pengikatan awal) dalam upaya menjaga solusi saya tetap generik.
Selain itu, saya ingin menghindari koneksi ke database CRM secara langsung (misalnya EDMX) karena ini akan menghentikan solusi saya untuk digunakan untuk CRM yang dihosting (misalnya tanpa akses DB langsung).
Saya memiliki persyaratan (yang disederhanakan) berikut, saya benar-benar kesulitan dengan kriteria seleksi:
7% data secara acak perlu dipilih (dan diperbarui).
Dalam SQL, kriteria pemilihannya akan relatif mudah - Saya tahu cara memilih persentase catatan secara acak. Sesuatu seperti:
SELECT TOP 7 PERCENT * FROM
(
SELECT TOP 1000 NEWID() AS Foo, [someColumns]
FROM [someTable]
)
AS Bar ORDER BY Bar.Foo ASC
Ini bekerja dengan sempurna. Saya mengumpulkan yang setara dengan LINQ adalah seperti:
from e in someEntities
orderby Guid.NewGuid()
select e;
Namun ada masalah, saya tidak tahu cara menggunakan LINQ dengan entitas dinamis CRM 2011 - sebaliknya mereka bersikeras menggunakan beberapa kelas/sintaks QueryExpression yang membatasi, atau FetchXML, seperti yang terlihat di laman ini (MSDN).
Saya telah mengidentifikasi opsi berikut untuk memenuhi persyaratan ini:
Dengan menggunakan entitas dinamis, kembalikan seluruh kumpulan data ke dalam Daftar, lalu cukup pilih pilihan acak berdasarkan indeks. Namun hal ini melibatkan pengembalian hingga 10.000 catatan melalui layanan data internet, yang mungkin lambat/tidak aman/dll.
Gunakan pernyataan FetchXML. Sayangnya saya tidak tahu mengambilXML, jadi saya tidak tahu apakah mungkin melakukan hal-hal seperti COUNT, TOP, PERCENT atau NEWID().
Gunakan Xrm.cs dan LINQ, atau gunakan Prosedur Tersimpan, atau tampilan SQL. Semua opsi ini berarti mengikat solusi ke konektivitas database langsung dan/atau pengikatan awal, yang mana hal ini tidak diinginkan.
Katakan tidak kepada pelanggan.
Setiap saran akan sangat dihargai! Bisakah mengambilXML melakukan kueri ini? Apakah ada cara yang lebih baik untuk melakukan ini?