检索实体列表

时间:2011-09-13 22:02:44

标签: c# dynamics-crm-2011

在CRM 2011中,我可以使用EarlyBoundEntities执行常规的创建,更新,删除操作。但是,我似乎无法找到使用相同类型的代码检索实体列表的示例。有没有办法使用EarlyBoundEntities检索类型的项目列表?

我查看了MSDN,如果我已经知道它的GUID,我可以找到的是如何检索实体。

 // Retrieve the account containing several of its attributes.
 ColumnSet cols = new ColumnSet(
                new String[] { "name", "address1_postalcode", "lastusedincampaign" });

 Account retrievedAccount = (Account)_service.Retrieve("account", _accountId, cols);
 Console.Write("retrieved, ");

我如何获得没有电话号码的所有帐户的列表?

2 个答案:

答案 0 :(得分:6)

如果您使用servicecontextname参数生成了早期绑定的代理类,则可以使用LINQ进行查询。

var context = new XrmServiceContext(service);
var accounts = context.AccountSet.Where(item => item.Telephone1 == null);

否则,如果您仍想使用其他查询方法(如QueryExpression),则可以使用LINQ将所有实例强制转换为所需的早期绑定类型。

var contacts = service.RetrieveMultiple(new QueryExpression
                                            {
                                                EntityName = "contact",
                                                ColumnSet = new ColumnSet("firstname")
                                            })
    .Entities
    .Select(item => item.ToEntity<Contact>());

如果您愿意,也可以使用扩展方法:

public static IEnumerable<T> RetrieveMultiple<T>(this IOrganizationService service, QueryBase query) where T : Entity
{
    return service.RetrieveMultiple(query)
        .Entities
        .Select(item => item.ToEntity<T>());
}

用法:

var contacts = service.RetrieveMultiple<Contact>(new QueryExpression
                                                        {
                                                            EntityName = "contact",
                                                            ColumnSet = new ColumnSet("firstname")
                                                        });

答案 1 :(得分:1)

MSDN上的SDK实际上有很多材料可以显示如何查询实体。

Create Queries to Retrieve Data

Build Queries with LINQ - 主要是早期约束的例子

API提供了三种或多或少相同的方式来查询数据库(LINQ,FetchXml和QueryExpression),尽管有一些限制(例如,参见LINQ limitations),你只能通过使用on来解决-premise安装和本机SQL调用。

但是,对于您提供的具有空电话号码的帐户示例,三种支持的查询方法中的任何一种都可以使用。