CRM 2013 に接続するときに、リストにある GUID のエンティティを取得するラムダ式を作成するスマートな方法があります。
このコードは Where 句で壊れ、エラーが発生します。
'where' 条件が無効です。エンティティ メンバーが無効なプロパティまたはメソッドを呼び出しています。
コード:
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 からすべての連絡先を取得し、コード内のループで必要なものを整理することで、これを解決しています。これは機能しますが、実際に関心のある 40 の Guid を SQL サーバーに送信する代わりに、10000 の連絡先をすべて取得する必要があるため、非常に遅くなります。