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

Bvr*_*rce 4 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;
}
Run Code Online (Sandbox Code Playgroud)

它不必是List.

编辑

这是上述查询运行时发生的情况 - 这是CRM的错吗? 在此输入图像描述

And*_*ers 15

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

where =>子句的左侧必须是属性名称,子句的右侧必须是值.您不能将左侧设置为常量.该子句的两个边都不能是常量.

支持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>());
}
Run Code Online (Sandbox Code Playgroud)

  • 查询表达式的结果是Microsoft.Xrm.Sdk.EntityCollection.实际帐户记录在该结果的实体集合中作为实体对象.select正在做的是将它们转换为Account对象,这样你仍然可以使用早期绑定类而不是像linq提供程序返回的通用Entity类. (2认同)