gpt4 book ai didi

c# - 使用 Contains 的 .Where 子句的 Lambda 表达式

转载 作者:行者123 更新时间:2023-11-30 14:31:09 25 4
gpt4 key购买 nike

当连接到 CRM 2013 时,有一种聪明的方法可以创建一个 lambda 表达式来获取列表中具有 GUID 的实体。

此代码在 Where 子句处中断并给出错误:

Invalid 'where' condition. An entity member is invoking an invalid property or method.

代码:

    private List<UserInformationProxy> GetContactsFromGuidList(List<Guid> contactList)
{
var result = _serviceContext.ContactSet
.Where(x=> contactList.Contains((Guid) x.ContactId)) // this line breaks
.Select(x => new UserInformationProxy()
{
FullName = x.FullName,
Id = x.ContactId
})
.Distinct()
.ToList<UserInformationProxy>();

return result;
}

// return class
public class UserInformationProxy
{
public Guid? Id { get; set; }
public string FullName { get; set; }
public string DomainName { get; set; }
}

目前,我正在通过从 ContactSet 中获取所有联系人并在我的代码中使用循环整理出我想要的联系人来解决此问题。这可行,但速度很慢,因为我需要获取所有 10000 个联系人,而不是将 40 个我真正感兴趣的 Guid 发送到 SQL 服务器。

最佳答案

QueryExpressions 支持 In 运算符,因此应该可以正常工作:

private List<UserInformationProxy> GetContactsFromGuidList(List<Guid> contactList)
{
var qe = new QueryExpression(Contact.EntityLogicalName);
qe.ColumnSet = new ColumnSet("fullname", "contactid")
qe.Criteria.AddCondition("contactid", ConditionOperator.In, list.Cast<Object>().ToArray());
qe.Distinct = true;

var results = service.RetrieveMultiple(qe).Entities.Select (e => e.ToEntity<Contact>()).
Select(x => new UserInformationProxy()
{
FullName = x.FullName,
Id = x.ContactId
});

return results;
}

附带说明,每个联系人都必须有一个非空的 Id,因此无需检查它。

关于c# - 使用 Contains 的 .Where 子句的 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21088074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com