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的末尾加上()。现在可以了。非常感谢。