Dynamics crm 2011 在CRM 2011中动态构建Linq

Dynamics crm 2011 在CRM 2011中动态构建Linq,dynamics-crm-2011,Dynamics Crm 2011,我试图检索具有Linq的实体的所有记录,条件是参数中为true的属性之一在记录中为true。 我正在尝试实现逻辑上的“或”,请查看代码,因为它将更有意义。 在FetchXML中,它正在工作: public void GetLock(bool account=false,bool contact=false,bool incident=false) { var fetch=@” "; 如果(账户) 获取+=@; 如果(联系) 获取+=@; 如果(事件) 获取+=@; 获取+=@” "; var

我试图检索具有Linq的实体的所有记录,条件是参数中为true的属性之一在记录中为true。

我正在尝试实现逻辑上的“或”,请查看代码,因为它将更有意义。

在FetchXML中,它正在工作:

public void GetLock(bool account=false,bool contact=false,bool incident=false)
{
var fetch=@”
";
如果(账户)
获取+=@;
如果(联系)
获取+=@;
如果(事件)
获取+=@;
获取+=@”
";
var processing=service.RetrieveMultiple(新的FetchExpression(fetch));
...
}
在Linq中,它不起作用:

public void GetLock(bool account=false,bool contact=false,bool incident=false)
{
var processing=linq.de_processimportSet
.Where(p=>//获取正在处理我们正在处理的实体的记录
(账户)?p.de_ProcessingAccount==true:false//获取ProcessingAccount为true的ProcessingImport记录或忽略此子句(false)
||(联系人)?p.de_ProcessingContact==真:假
||(事件)?p.de_处理事件==真:假
);
...
}

CRM读取创建的Linq语句,并且非常特别。这应该适用于您,因为集合的类型为IQueryable,您可以根据需要添加where语句:

public void GetLock(bool account = false, bool contact = false, bool incident = false)
{
    var query = linq.de_processimportSet;

    if(account){
        query = query.Where(p => p.de_ProcessingAccount);
    }

    if(contact){
        query = query.Where(p => p.de_ProcessingContact);
    }

    if(incident){
        query = query.Where(p => p.de_ProcessingIncident);
    }

    var processing = query.ToList();
}
编辑 CRM的Linq不支持这种开箱即用的功能,但您可以下载LinqKit并使用它的谓词生成器和
AsExpandable
magic使其工作

在这种情况下,您还可以放弃Linq并使用查询表达式:

public void GetLock(bool account = false, bool contact = false, bool incident = false)
{
    var qe = new QueryExpression("de_processimport");
    qe.ColumnSet = new ColumnSet(true);

    if(account){
        qe.AddCondition("de_processingaccount" ConditionOperator.Equal, true);
    }

    if(contact){
        qe.AddCondition("de_processingcontact" ConditionOperator.Equal, true);
    }

    if(incident){
        qe.AddCondition("de_processingincident" ConditionOperator.Equal, true);
    }

    var processing = service.RetrieveMultiple(qe).Entities.Select(c => c.ToEntity<de_processimport>());
}
public void GetLock(bool account=false,bool contact=false,bool incident=false)
{
var qe=新的查询表达式(“de_processimport”);
qe.ColumnSet=新列集(true);
如果(账户){
AddCondition(“de_processingaccount”ConditionOperator.Equal,true);
}
如果(联系){
AddCondition(“de_processingcontact”ConditionOperator.Equal,true);
}
如果(事件){
AddCondition(“de_processingincident”ConditionOperator.Equal,true);
}
var processing=service.RetrieveMultiple(qe.Entities.Select(c=>c.ToEntity());
}

CRM读取创建的Linq语句,并且非常特别。这应该适用于您,因为集合的类型为IQueryable,您可以根据需要添加where语句:

public void GetLock(bool account = false, bool contact = false, bool incident = false)
{
    var query = linq.de_processimportSet;

    if(account){
        query = query.Where(p => p.de_ProcessingAccount);
    }

    if(contact){
        query = query.Where(p => p.de_ProcessingContact);
    }

    if(incident){
        query = query.Where(p => p.de_ProcessingIncident);
    }

    var processing = query.ToList();
}
编辑 CRM的Linq不支持这种开箱即用的功能,但您可以下载LinqKit并使用它的谓词生成器和
AsExpandable
magic使其工作

在这种情况下,您还可以放弃Linq并使用查询表达式:

public void GetLock(bool account = false, bool contact = false, bool incident = false)
{
    var qe = new QueryExpression("de_processimport");
    qe.ColumnSet = new ColumnSet(true);

    if(account){
        qe.AddCondition("de_processingaccount" ConditionOperator.Equal, true);
    }

    if(contact){
        qe.AddCondition("de_processingcontact" ConditionOperator.Equal, true);
    }

    if(incident){
        qe.AddCondition("de_processingincident" ConditionOperator.Equal, true);
    }

    var processing = service.RetrieveMultiple(qe).Entities.Select(c => c.ToEntity<de_processimport>());
}
public void GetLock(bool account=false,bool contact=false,bool incident=false)
{
var qe=新的查询表达式(“de_processimport”);
qe.ColumnSet=新列集(true);
如果(账户){
AddCondition(“de_processingaccount”ConditionOperator.Equal,true);
}
如果(联系){
AddCondition(“de_processingcontact”ConditionOperator.Equal,true);
}
如果(事件){
AddCondition(“de_processingincident”ConditionOperator.Equal,true);
}
var processing=service.RetrieveMultiple(qe.Entities.Select(c=>c.ToEntity());
}

您是遇到了错误,还是没有返回任何结果?我遇到了错误:Where条件无效。您是遇到了错误,还是没有返回任何结果?我遇到了错误:Where条件无效。谢谢您的回答;我确实试过了你的建议。这样做的问题是查询返回where语句的“and”;我试图得到“或”。想一想,如果不为三个输入参数(总共9个语句)中的每一个参数手动连接它们,这是不可能的。我尝试使用Union,但Union不受支持;所以我每次都要列举下一次可能的结合,这基本上是可怕的。对于这一点,我将坚持使用FetchXML。谢谢你的关注,谢谢你的回答;我确实试过了你的建议。这样做的问题是查询返回where语句的“and”;我试图得到“或”。想一想,如果不为三个输入参数(总共9个语句)中的每一个参数手动连接它们,这是不可能的。我尝试使用Union,但Union不受支持;所以我每次都要列举下一次可能的结合,这基本上是可怕的。对于这一点,我将坚持使用FetchXML。谢谢你的关注。