可以在Dynamics CRM中使用LINQ来使所有帐户不在集合中吗?

时间:2013-03-30 12:53:02

标签: linq dynamics-crm-2011

如何编写LINQ查询以返回帐号不在列表中的所有帐户?
该列表将从excel文档中提取。

private bool GetAccounts()
{
        List<String> accountIds = new List<String>();
        accountIds.Add( "[unknown]");
        var query = from accounts in context.AccountSet where !accountIds.Contains(accounts.AccountNumber) select accounts;
}

它不一定是列表。

修改

以上查询运行时会发生这种情况 - 这是CRM的错吗? enter image description here

1 个答案:

答案 0 :(得分:15)

我不相信你可以通过linq。以下是SDK中的where子句限制。

  

其中=&gt;   子句的左侧必须是属性名称,子句的右侧必须是值。您不能将左侧设置为常量。该子句的两个边都不能是常量。

     

支持String函数Contains,StartsWith,EndsWith和Equals。

您可以使用QueryExpression或FetchExpressions来解决这些限制。您想要的查询使用QueryExpression看起来像这样。我唯一要提的是,如果你期待很多记录(我相信5000+),你很可能也需要为你的功能实现分页。

private static IEnumerable<Account> GetAccounts(IOrganizationService proxy)
{
    List<String> accountIds = new List<String>(new string[]{"654321", "12345"});

    var results = proxy.RetrieveMultiple(new QueryExpression(Account.EntityLogicalName)
    {
        ColumnSet = new ColumnSet("accountid", "name", "accountnumber"),
        Criteria = new FilterExpression()
        {
            Conditions = { new ConditionExpression("accountnumber", ConditionOperator.NotIn, accountIds) }
        }
    });

    return results.Entities.Select(x=> x.ToEntity<Account>());
}