选择“使用 LINQ 与 CRM 进行非重复”
本文关键字:CRM 使用 LINQ 选择 | 更新日期: 2023-09-27 18:36:21
我正在尝试使用 LINQ to CRM 查询选择非重复集,它继续返回重复记录。我使用的查询是:
var linqQuery = (from r in gServiceContext.CreateQuery("opportunity")
join c in gServiceContext.CreateQuery("account") on ((EntityReference)r["accountid"]).Id equals c["accountid"]
join u in gServiceContext.CreateQuery("systemuser") on ((EntityReference)r["ownerid"]).Id equals u["systemuserid"]
where (r["statuscode"].Equals("100000004") || r["statuscode"].Equals("100000003")) && r["statecode"].Equals("Open")
where u["internalemailaddress"].Equals(_currentUser.Email)
select new
{
AccountId = !c.Contains("accountid") ? string.Empty : c["accountid"],
Account = !c.Contains("name") ? string.Empty : c["name"]
}).Distinct();
我是否缺少一些使.Distinct()
工作的东西?还是有更好的方法
没有显式比较器的Distinct
调用仅使用默认的相等比较器,在匿名类型的情况下,该比较器归结为Object.Equals
。如果匿名类型的所有属性都相等,则在匿名类型中重写此值以相等。在这种情况下,它将检查AccountId
和Account
属性。
我怀疑这是有效的,并且值在大小写方面是不同的(因为默认情况下字符串比较区分大小写),或者它们实际上是不同的,你只是看不到它。
幸运的是,它与特定于 CRM 的 Linq 提供程序无关。
使用指定的IEqualityComparer<T>
:http://msdn.microsoft.com/en-us/library/bb356803
另一件事,我不确定匿名类是否支持IEqualityComparer<T>
实现。