如何将Xrm.EntityCollection转换为List?

时间:2016-02-08 22:44:02

标签: c# dynamics-crm dynamics-crm-2013 fetchxml

概述:

我正在编写FetchXML查询,以在Dynamics 2015在线CRM实例中返回已禁用邮箱的用户。现在我来到一个需要将查询结果绑定到ListView的阶段。 (该项目使用Dynamics SDK 2015 libs。)

为了做到这一点,我试图转换返回的结果,这是一个EntityCollection - &gt;到列表。但是在我的演员代码中找不到import operator ops = { '+': operator.add, '-': operator.sub, '*': operator.mul, '/': operator.div } import sys print str(sys.argv) array = sys.argv i = 1 my_stack = [] while i < len(array): # if array[i] == float(array[i]) or array[i] == int(array[i]): if array[i] != '+' or array[i] != '-' or array[i] != '*' or array[i] != '/': my_stack.insert(0, array[i]) else: answer = ops[array[i]](float(my_stack[1]),float(my_stack[0])) my_stack.pop(1) my_stack.pop(0) my_stack.insert(0, answer) i = i + 1 print my_stack[0]

我正在按照这个例子的第二个答案来进行投射:

Convert Entity Collection to Ilist where Entity Collection does not implement IEnumerable

问题:

有谁知道如何引用CRMSDKTypeProxy?或者将我的收藏品投射到列表的任何替代方法?

代码:(简短示例)

CRMSDKTypeProxy

2 个答案:

答案 0 :(得分:8)

您可以使用ToEntity<T>方法转换为类似强类型的实体:(在此代码段service中是实现IOrganizationService接口和query的对象}是一个QueryExpression对象。)

// RetrieveMultiple will never return null, so this one-liner is safe to use.
var userList = service.RetrieveMultiple(query)
    .Entities
    .Select(e => e.ToEntity<SystemUser>())
    .ToList();

我注意到您正在使用CrmServiceClient命名空间中的Microsoft.Xrm.Tooling.Connector。这是在Dynamics CRM 2013中引入的。

您的代码可能如下所示:

var userList = svcClient.OrganizationServiceProxy
    .RetrieveMultiple(new FetchExpression(fetchXml))
    .Entities
    .Select(e => e.ToEntity<SystemUser>())
    .ToList();

另外这也应该有效:

var userList = svcClient.GetEntityDataByFetchSearchEC(fetchXml)
    .Entities
    .Select(e => e.ToEntity<SystemUser>())
    .ToList();

答案 1 :(得分:2)

@Henk van Boeijen部分正确。而不是在他的示例中使用service.Retrieve将其替换为您的svcClient.GetEntityDataByFetchSearchEC(DisabledMailBoxUsersFetchXML)调用。

var userList = svcClient.GetEntityDataByFetchSearchEC(DisabledMailBoxUsersFetchXML).Entities.Select(e => e.ToEntity<SystemUser>());

如果您没有使用早期绑定实体,那么您只需在Entity集合上调用.ToList()即可。

var userList = svcClient.GetEntityDataByFetchSearchEC(DisabledMailBoxUsersFetchXML).Entities.ToList();

EntityCollection的Entities属性是一个扩展Collection对象的DataCollection,您可以调用常用方法。