与LINQ截然不同

时间:2013-01-11 15:36:07

标签: linq distinct

 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?

请告知,谢谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可能需要查看DistinctBy中的MoreLinq方法。您可以将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();

Btw,而不是引用比较,匿名类型实例的相等性是通过比较它们的每个属性来确定的。

我最近在这个主题上找到了一个有趣的讨论,其中Anders Hejlsberg本人建议解决这个问题。你可以阅读它here.