C# 使用Linq列出时未获得不同的项?

C# 使用Linq列出时未获得不同的项?,c#,linq,C#,Linq,下面是我如何试图得到一个独特的项目列表 var queryResults = PatientList.Distinct(); PatientList = queryResults.ToList<SelectListItem>(); var queryResults=PatientList.Distinct(); PatientList=queryResults.ToList(); 由于某些原因,我在这里没有得到一个明确的列表。不确定PatientList包含什么类

下面是我如何试图得到一个独特的项目列表

    var queryResults = PatientList.Distinct();
    PatientList = queryResults.ToList<SelectListItem>();
var queryResults=PatientList.Distinct();
PatientList=queryResults.ToList();

由于某些原因,我在这里没有得到一个明确的列表。

不确定PatientList包含什么类型的项目,但我想您必须在自定义对象上实现IEquatable

这在这里已经被问过了:

您的
SelectListItem
类需要重写
Equals
GetHashCode
(并可选地实现
IEquatable
)。否则,具有相同值的不同实例将被视为不同

另一个选项是实现
IEqualityComparer
,并将其作为第二个参数传递给
Distinct

Use

var queryResults = PatientList.GroupBy(x=>x.Id).Select(x=>x.FirstOrDefault())
    PatientList = queryResults.ToList<SelectListItem>();
var queryResults=PatientList.GroupBy(x=>x.Id)。选择(x=>x.FirstOrDefault())
PatientList=queryResults.ToList();
你可以随时尝试

 PatientList = PatientList.GroupBy(x=>x.Id).Select(x=>x.FirstOrDefault()).ToList<SelectListItem>();
PatientList=PatientList.GroupBy(x=>x.Id)。选择(x=>x.FirstOrDefault()).ToList();
它将根据您分组的内容为您提供不同的结果

退房


另一个供参考的问题是:

如果在被比较的对象中实现它,那么它可能是IEquatable,而不是IEqualityComparer…它实际上是SelectListItem的列表。无法从用法推断方法yadda yadda的类型参数。请尝试显式指定类型参数。@DmainEvent,将x.Id更改为您需要分组的任何值。不确定你的评论是什么意思,哪一个论点是不能推断的?很抱歉。我现在正在另一台计算机上工作,以更正此消息,而不是有代码的计算机(今天早上有点懒:-)。但是我把它改成了正确的值。。。不知道为什么它不起作用。@DainEvent,嗯,好的,那么你在哪一行得到了这个错误?groupby或转换为列表的位置?groupby应该可以正常工作。您根据什么对所有内容进行分组?您所做的与@Gage类似。。。我在做我平常做的事,做一个白痴。我忘了在FirstOrDefault的末尾加上()。现在可以了。非常感谢。