【问题标题】:ASP.net Core C# Linq Distinct not workingASP.net Core C# Linq Distinct 不工作
【发布时间】:2021-04-27 11:21:19
【问题描述】:

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

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

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();

请问我做错了什么?

非常感谢

【问题讨论】:

  • 你的类ProcessListSummary 可能不会覆盖EqualsGetHashCode,Linq 使用它来确定一个对象是否等于另一个。

标签: c# linq asp.net-core razor


【解决方案1】:

您的类ProcessListSummary 可能不会覆盖EqualsGetHashCode,因此将使用System.Object 的默认值,它只是比较引用。您始终使用ProcessListSummary 的新实例,因此所有实例都被视为不相等。

所以要么通过比较相关属性来有意义地覆盖Equals+GetHashCode,和/或实现IEquatable<ProcessListSummary>(以相同的方式)或将自定义IEqualityComparer<ProcessListSummary>传递给Distinct。如果您有多种方法来比较此类,或者您一般不想更改(或无法更改)它,则应该使用后者。

另一种选择是在提供该功能的匿名类型或元组上使用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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2021-06-17
    • 2017-07-14
    • 2021-05-28
    • 2020-03-16
    相关资源
    最近更新 更多