0
 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).ToList();

这会产生一个列表,如果不止一个,它将打印出重复,我该如何使用.distinct?

请指教,谢谢

4

2 回答 2

0
 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 workstation).Distinct().ToList();

看看这个

http://msdn.microsoft.com/en-us/library/bb338049.aspx

于 2013-01-11T15:37:43.727 回答
0

您可能想看看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 本人提出了这个问题的解决方案。你可以在这里阅读。

于 2013-01-11T23:24:54.133 回答