我有一个List<T>
对象:
List<MyCampaignClass> campaignsToProcess = new List<MyCampaignClass>();
我通过LINQ
对上游数据进行了一些过滤。
var results= from h in campaignHistory
join a in campaignAvailability
on new { h.campaignId, h.reportDate } equals new { a.campaignId, a.reportDate }
where h.operationDate >= a.startDate
select h;
然后我将它添加到我正在运行的List<T>
对象中。我希望声明的类中有两个值:MyCampaignClass.campaignId
和MyCampaignClass.reportDate
。
results.Select(m =>
new MyCampaignClass()
{
campaignId = m.campaignId,
reportDate = m.reportDate
})
.Distinct() //doesn't work
.ToList()
.ForEach(p => campaignsToProcess.Add(p));
我无法理解为什么.Distinct()
无效。
答案 0 :(得分:3)
有一种简单的方法,您可以先使用匿名类型然后再制作另一个投影来转换它们MyCampaignClass
historyResults
.Select(m => new { m.campaignId, m.reportDate })
.Distinct()
.Select(m =>
new MyCampaignClass()
{
campaignId = m.campaignId,
reportDate = m.reportDate
});
这是有效的,因为匿名类型是通过属性值而不是它们的引用来比较的。
另一种方法是在Equals
中正确覆盖GetHashcode
和MyCampaignClass
方法,或为您的班级实施IEqualityComparer<T>
并将其传递给Distinct
方法。