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