ASP.net 核心 C# Linq Distinct 不工作

ASP.net Core C# Linq Distinct not working

我第一次尝试使用 Linq 从 ASP.net Core Razor Pages 中的列表中获取不同的值。

为此,我使用了以下代码,但它只是 returns 原始列表中的所有行,包括重复项:

PLDistinct = PL.Select(p => new ProcessListSummary {  Title=  p.Title, 
                                                  WSID = p.WSID,
                                                  QImageTnURL = p.QImageTnURL,
                                                  QImageURL = p.QImageURL,
                                                  QDescription = p.QDescription,
                                                  PComplete= p.PComplete,
                                                  MIdent = p.MIdent,
                                                  WID = p.WID})
                                                  .Distinct().ToList();

请问我做错了什么?

非常感谢

您的 class ProcessListSummary 可能不会覆盖 EqualsGetHashCode,因此将使用仅比较引用的 System.Object 中的默认值。您总是使用 ProcessListSummary 的新实例,因此所有实例都被认为是不相等的。

因此,要么有意义地覆盖 Equals+GetHashCode,通过比较相关属性,and/or 实现 IEquatable<ProcessListSummary>(以相同的方式)或传递自定义 IEqualityComparer<ProcessListSummary>Distinct。如果您有多种方法可以比较此 class 或者您一般不想更改(或不能更改)它,则应执行后者。

另一种选择是在提供该功能的匿名类型或元组上使用 Distinct

PLDistinct = PL
    .Select(p => (p.Title,p.WSID,p.QImageTnURL,p.QImageURL,p.QDescription,p.PComplete,p.MIdent,p.WID))
    .Distinct()
    .Select(p => new ProcessListSummary {  Title=  p.Title, 
                                           WSID = p.WSID,
                                           QImageTnURL = p.QImageTnURL,
                                           QImageURL = p.QImageURL,
                                           QDescription = p.QDescription,
                                           PComplete= p.PComplete,
                                           MIdent = p.MIdent,
                                           WID = p.WID})
    .ToList();