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
可能不会覆盖 Equals
和 GetHashCode
,因此将使用仅比较引用的 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();
我第一次尝试使用 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
可能不会覆盖 Equals
和 GetHashCode
,因此将使用仅比较引用的 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();