您可能想看看MoreLinq中的DistinctBy方法。您可以在其中将 lambda 表达式作为参数传递。
在您的示例中,它看起来类似于:
var sourceId =
(from workstation in db.station
join letter in db.letter on workstation.id equals letter.Site_Id
where ThatDate < DateTime.Now.AddYears(-1)
select workstatio).DistinctBy(ws => ws.Id).ToList();
您还可以将 DistinctBy 与多个属性一起使用:
var sourceId =
(from workstation in db.station
join letter in db.letter on workstation.id equals letter.Site_Id
where ThatDate < DateTime.Now.AddYears(-1)
select workstatio).DistinctBy(ws => new {Id = ws.Id, OtherProperty = ws.OtherProperty}).ToList();
顺便说一句,匿名类型实例的相等性不是引用比较,而是通过比较它们的每个属性来确定的。
我最近发现了一个关于这个主题的有趣讨论,其中 Anders Hejlsberg 本人提出了这个问题的解决方案。你可以在这里阅读。