当查询包含联接时,如何在 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 2011 linq 查询中使用谓词

我无法让它工作,只能使用查询表达式。我希望 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",而不是使用此运算符"="。

尝试一下,等待您的反馈!