WCFプロジェクトでXRM(アーリーバウンド)タイプを使用しているので、CRMモデルにアクセスでき、LINQクエリを使用できます。しかし、ここで説明する問題が発生where
しました。これは、 XRMLINQに固有の句の制限です。
ここで[条項の制限]
句の左側は属性名である必要があり、句の右側は値である必要があります。左側を定数に設定することはできません。句の両側を定数にすることはできません。
文字列関数Contains、StartsWith、EndsWith、およびEqualsをサポートします。
ポップアップし続ける要件の1つは、パラメーターがnullの場合、すべてのエンティティを返す必要があります。それ以外の場合は、パラメーターでフィルター処理します。しかし、上記の要件を破ったり、シナリオがnullの場合にシナリオを処理するために複数のクエリを記述したりせずに、これを行う方法を考えることはできません。
これは私のクエリの1つの例です。typeFilter == null
ここでの問題は、LHSで定数を使用したことです。私の実際のコードには、別のクエリを指すガード句がありtypeFilter == null
ますが、開始/終了日フィルター(両方ともnull許容)を追加する必要があり、null許容のすべての組み合わせに対してクエリを記述したくない量を表現できません。
private IQueryable<EventInfo> getAllEvents( DataContext context, EventType? typeFilter )
{
return (
from evt in context.new_eventSet
where
( evt.statecode == new_eventState.Active ) &&
( typeFilter == null || evt.new_EventType.Value == (int) typeFilter.Value )
select new EventInfo()
{
ID = evt.Id,
EventType = (EventType) evt.new_EventType.Value
...
} );
}