ダイナミックエンティティ(Microsoft.Xrm.Sdk.Entity、レイトバインディングメソッドのように)を使用してCRM 2011データを使用するサービスを開発しています。私は故意にXrm.csメソッド(初期バインディング)を使用して、私のソリューションを一般的なものに保ちません。CRM 2011ダイナミックエンティティを使用してレコードの割合を選択
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
これは完全に動作します。私はCRM 2011のダイナミックエンティティとLINQを使用する方法を知らない、問題ががあります
from e in someEntities
orderby Guid.NewGuid()
select e;
- 代わりに、彼らはいくつかの制限のQueryExpressionクラス/構文のいずれかを使用して主張:私は何かのようにLINQ当量がある集まります、またはfetchXMLのようになります(this page (MSDN)参照)。
私はこの要件を満たすために、以下のオプションを認識している:
は、単にインデックスによるランダム選択を選択し、リストに設定され、全レコードを返す、動的なエンティティを使用します。しかし、これは、インターネットデータサービスを介して最大10,000のレコードを返すことになります。これは遅い/安全でない/などです。
fetchXML文を使用します。残念ながら、私はfetchXMLを知らないので、COUNT、TOP、PERCENT、NEWID()などの操作が可能かどうかはわかりません。
Xrm.csとLINQを使用するか、ストアドプロシージャまたはSQLビューを使用します。これらのオプションはすべて、ソリューションを直接的なデータベース接続および/または初期バインドに結びつけることを意味しますが、これは望ましくありません。
お客様に言ってください。
何かアドバイスをいただければ幸いです! fetchXMLはこのクエリを実行できますか?これを行うより良い方法はありますか?
要件作成者は、ソリューションがホストされた環境に適用可能であることを確信していると思いますので、idsのリストを返してそれらをランダム化することにします。私は投票しました。この方法が成功すれば、答えとしてマークします。ありがとう:) – Alec
私は上記の方法を使用してこの作業を行うことができました。完全なセットをIDのリストとして返すだけで、メモリ内のランダムな選択を行った後で完全なデータを選択します。だから私はこれを答えとして置くでしょうが、同様の要件を持つ誰もがjamnapの答えの情報を読むべきであると推薦します。私はまだどのソリューションがより効率的であるかはわかりません。 – Alec