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



我第一次尝试使用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,因此默认值将从仅比较引用的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();

最新更新