我正在尝试编写查询以查找用户的所有潜在重复记录。副本定义为以下任何一种:
我有来自两个独立系统的数据,从系统B我的表上的externalID将填充GUID,从系统A,externalID将为null。我只关心在两个系统之间找到重复,而不是在每个系统中重复。
我到目前为止的查询:
Dim duplicates = db.People.Where(Function(c) c.CID = CID And c.DeleteFlag = False). _
Where(Function(p) p.EmailAddress <> Nothing And p.ExternalID <> Nothing) _
.GroupBy(Function(i) New With {i.EmailAddress, i.LastName, i.FirstName}) _
.Where(Function(g) g.Count() > 1).[Select](Function(g) g.Key)
我遇到的问题:
答案 0 :(得分:2)
绝不使用<>
或=
与Nothing
进行比较,您将始终获得False
(类似于sql)。 Nothing
不等于或等于其他任何东西。而是使用IsNot
或Is Nothing
。也可以使用AndAlso
代替And
(和OrElse
代替Or
)。
在VB.NET中(而不是C#),您还必须指定用于匿名类型的Equals
和GetHashCode
的键列。
Dim duplicates = db.People.Where(Function(c) c.CID = CID And c.DeleteFlag = False).
Where(Function(p) p.EmailAddress IsNot Nothing AndAlso p.ExternalID IsNot Nothing).
GroupBy(Function(i) New With {Key i.EmailAddress, Key i.LastName, Key i.FirstName}).
Where(Function(g) g.Count() > 1).
Select(Function(g) g.Key)