当查询包含联接时,如何在 crm sdk 2011 linq 查询中使用谓词
本文关键字:查询 linq 2011 sdk 谓词 crm 包含联 | 更新日期: 2023-09-27 17:56:42
在阅读后,我发现在使用SDK Linq提供程序查询CRM 2011时无法使用.Contains
方法。这是一个问题,因为我需要查询属于从我的应用程序传递的 Guid 集合的记录。经过更多的调查,我发现了 LinqKit 和谓词生成器;伟大!在查询中使用单个实体集,谓词工作正常:
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
});
我无法让它工作,只能使用查询表达式。我希望 CRM sdk Linq 提供程序在未来得到改进,使其更符合 Linq 向实体提供的功能。
嗯。 您可以先单独获得访问,然后将其与其他实体但与另一个实体一起加入
编码方式如下。
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 {};
注意:确保在连接中使用单词"equal",而不是使用此运算符"="。
尝试一下,等待您的反馈!