当查询包含连接时,如何在crm sdk 2011 linq查询中使用谓词?

时间:2013-01-30 10:28:21

标签: c# linq dynamics-crm-2011

阅读后,我发现在使用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
    });

2 个答案:

答案 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 {};

注意:确保在连接中使用“相等”一词,不要使用此运算符“=”。

尝试并等待您的反馈!