阅读后,我发现在使用SDK Linq提供程序查询CRM 2011时,我无法使用.Contains
方法。这是一个问题,因为我需要查询属于从我的应用程序传递的Guid集合的记录。经过更多的调查,我发现了LinqKit和Predicate Builder;大!在查询中使用单个实体集,谓词可以正常工作:
var visits = Context.Crm_scheduled_visitSet.AsExpandable().Where(predicate);
我遇到的问题是,当我扩展查询以包含到另一个实体集的连接时,当我包含谓词时,我无法运行查询。
这是我的查询没有运行良好的谓词但我需要过滤Guid的集合上的Crm_scheduled_visitSet
:
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
});
答案 0 :(得分:1)
我无法使用它,使用查询表达式。我希望CRM sdk Linq提供商在未来得到改进,更符合Linq to Entities提供的功能。
答案 1 :(得分:0)
好。您可以先单独访问,然后将其与另一个实体联系,但使用其他实体
编码方式如下。
var visits = Context.Crm_scheduled_visitSet.AsExpandable().Where(predicate);
var scores = from v in visits join r in Context.crm_business_risk_scoreSet
on v.Crm_scheduled_visitId.Value equals r.crm_business_risk_score_id.Id
select new {};
注意:确保在连接中使用“相等”一词,不要使用此运算符“=”。
尝试并等待您的反馈!