.Contains
いろいろ読んだ後、SDK Linq プロバイダーを使用して CRM 2011 にクエリを実行するときに、このメソッドを使用できないことがわかりました。アプリケーションから渡される Guid のコレクションに属するレコードを照会する必要があるため、これは問題です。さらに調査した結果、LinqKit と Predicate Builder を発見しました。すごい!クエリで単一のエンティティセットを使用すると、述語は正常に機能します。
var visits = Context.Crm_scheduled_visitSet.AsExpandable().Where(predicate);
私が抱えている問題は、クエリを拡張して別のエンティティセットへの結合を含めると、述語を含めるとクエリを実行できないことです。これは正常に実行される述語のないクエリですがCrm_scheduled_visitSet
、Guid のコレクションでフィルター処理する必要があります。
var scores = Context.Crm_scheduled_visitSet
.Join(Context.crm_business_risk_scoreSet, v => v.Crm_scheduled_visitId.Value, s => s.crm_business_risk_score_id.Id, (v, s) => new
{
OrgID = v.Crm_client_id.Id,
VisitStartdate = object.Equals(null, v.crm_actual_start_date) ? new DateTime() : v.crm_actual_start_date.Value,
SectionId = s.crm_business_risk_section_id.Id,
RisLevelId = s.crm_business_risk_level_id.Id,
RiskRatingId = s.crm_business_risk_rating_id.Id
});
私がしなければならないことですが、これは実行されません:
var scores = base.Context.Crm_scheduled_visitSet.AsExpandable().Where(predicate)
.Join(base.Context.crm_business_risk_scoreSet, v => v.Crm_scheduled_visitId.Value, s => s.crm_business_risk_score_id.Id, (v, s) => new
{
OrgID = v.Crm_client_id.Id,
VisitStartdate = object.Equals(null, v.crm_actual_start_date) ? new DateTime() : v.crm_actual_start_date.Value,
SectionId = s.crm_business_risk_section_id.Id,
RisLevelId = s.crm_business_risk_level_id.Id,
RiskRatingId = s.crm_business_risk_rating_id.Id
});