2

我正在尝试使用 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()工作吗?或者有更好的方法吗?

4

2 回答 2

1

使用指定的:http IEqualityComparer<T>: //msdn.microsoft.com/en-us/library/bb356803

另一件事,我不确定匿名类是否支持这些IEqualityComparer<T>实现。

于 2012-06-06T15:37:16.220 回答
1

没有显式比较器的Distinct调用仅使用默认的相等比较器,在匿名类型的情况下归结为Object.Equals. 如果类型的所有属性都相等,则在匿名类型中将其覆盖为相等。在这种情况下,它将检查AccountIdAccount属性。

我怀疑这是可行的,并且值在大小写方面是不同的(因为默认情况下字符串比较区分大小写),或者它们实际上是不同的,你只是看不到它。

幸运的是,它与特定于 CRM 的 Linq 提供商无关。

于 2012-06-06T15:54:59.773 回答