簡體   English   中英

PredicateBuilder和LINQ to CRM

[英]PredicateBuilder and LINQ to CRM

我試圖提取具有多個謂詞的(從AsyncOperationBase表中)運行的工作流的所有實例。

我知道您不能使用諸如myArray.Contains(x.WorkflowActivationId.Id)類的東西,因此我正在嘗試使用PredicateBuilder動態構建PredicateBuilder

這是我到目前為止的內容:

var predicate = PredicateBuilder.False<Service.AsyncOperation>();

//Apparently, checking for null is suppose to prevent my issue from happening...
predicate = predicate.And(x => x.Name == searchWorkflowDefinitionText.Text);
predicate = predicate.And(x => x.StatusCode != null);
predicate = predicate.And(x => x.StatusCode.Value == 10);
predicate = predicate.And(x => x.WorkflowActivationId != null);


foreach (Guid s in listBox3.Items)
{
    predicate = predicate.Or(x => x.WorkflowActivationId.Id == s);
}


var r = (from c in xrm.CreateQuery<Service.AsyncOperation>().AsExpandable().Where(predicate)
                         select c).ToList();

但是我最終得到了很多LINQ to CRM可怕的異常:

Invalid 'where' condition. An entity member is invoking an invalid property or method.

據我所知,要避免出現此錯誤,您需要“抓取”屬性。 像:

predicate = predicate.Or(x => x.WorkflowActivationId == s);

必須更改為

predicate = predicate.Or(x => x.WorkflowActivationId.Id == s);

而且,謂詞的左側必須是實體屬性。 再次,據我所知,我的謂詞滿足了這些要求,所以我在這里有點茫然。

有任何想法嗎 ?

我認為我需要通過執行這兩個步驟來繞過LINQ達到CRM的極限。

第一:

var t = xrm.AsyncOperationSet.Where(x => x.StatusCode.Value == 10 && x.Name == wkname).Select(y => new Service.AsyncOperation
                {
                    AsyncOperationId = y.AsyncOperationId.Value,
                    WorkflowActivationId = y.WorkflowActivationId
                }).ToList();

目前,我真的只需要這兩個屬性。

然后,我就可以擁有完整LINQ訪問t的內容。

var y = t.Where(x => myArray.Contains(x.WorkflowActivationId.Id)).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM