C# 检索实体列表

C# 检索实体列表,c#,dynamics-crm-2011,C#,Dynamics Crm 2011,在CRM 2011中,我可以使用EarlyBoundEntities执行通常的创建、更新和删除操作。然而,我似乎找不到使用相同类型代码检索实体列表的示例。有没有一种方法可以使用EarlyBoundEntities检索类型为的项列表 我已经浏览了MSDN,我所能找到的就是如何检索一个实体,如果我已经知道它的GUID的话 // Retrieve the account containing several of its attributes. ColumnSet cols = new Colum

在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, ");

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

MSDN上的SDK中实际上有大量的资料显示了如何查询实体

-主要是早期绑定示例

API提供了三种大致相同的查询数据库的方法(LINQ、FetchXml和QueryExpression),尽管存在一些限制(例如,请参阅),您只能通过使用本地安装和本机SQL调用来解决


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

如果您已使用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>());
var contacts=service.RetrieveMultiple(新QueryExpression
{
EntityName=“联系人”,
ColumnSet=新列集(“名字”)
})
.实体
.Select(item=>item.ToEntity());
如果您愿意,还可以使用扩展方法:

public static IEnumerable<T> RetrieveMultiple<T>(this IOrganizationService service, QueryBase query) where T : Entity
{
    return service.RetrieveMultiple(query)
        .Entities
        .Select(item => item.ToEntity<T>());
}
公共静态IEnumerable RetrieveMultiple(此IOR组织服务,查询数据库查询),其中T:Entity
{
return service.RetrieveMultiple(查询)
.实体
.Select(item=>item.ToEntity());
}
用法:

var contacts = service.RetrieveMultiple<Contact>(new QueryExpression
                                                        {
                                                            EntityName = "contact",
                                                            ColumnSet = new ColumnSet("firstname")
                                                        });
var contacts=service.RetrieveMultiple(新QueryExpression
{
EntityName=“联系人”,
ColumnSet=新列集(“名字”)
});

@Luke我想是LINQ页面的链接专门包含了关于早期绑定实体的信息<代码>“使用早期绑定编程类时,如果在使用代码生成工具(CrmSvcUtil.exe)时使用servicecontextname参数指定类的名称,则可以生成从OrganizationServiceContext类派生的类。使用此类允许使用模式+集引用IQueryable实体集,例如AccountSet以引用帐户实体记录的集合。“我将编辑答案以包含此内容。第一个示例就是我所要了解的。其他人(对我来说)基本上是在贬低早期绑定实体的好处,因为我必须将实体的名称编码为字符串,并且只有在属性/实体更改时才会在运行时生成错误,其中第一个示例在我更改属性/实体时会给出编译时错误。