使用Linq列表时没有获得不同的项目?

时间:2011-08-31 12:47:47

标签: c# linq

以下是我试图获取不同项目列表的方式......

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

出于某种原因,我在这里没有得到明确的清单。

3 个答案:

答案 0 :(得分:8)

使用

var queryResults = PatientList.GroupBy(x=>x.Id).Select(x=>x.FirstOrDefault())
    PatientList = queryResults.ToList<SelectListItem>();

您可以随时尝试

 PatientList = PatientList.GroupBy(x=>x.Id).Select(x=>x.FirstOrDefault()).ToList<SelectListItem>();

它会根据你所分组的任何内容为你提供截然不同的结果

查看http://blog.jordanterrell.com/post/LINQ-Distinct()-does-not-work-as-expected.aspx

另一个可供参考的问题:Returning a Distinct IQueryable with LINQ?

答案 1 :(得分:1)

不确定您的PatientList包含哪些项目,但我想您必须在自定义对象上实现IEquatable。

此前已经解决了这个问题: Distinct not working with LINQ to Objects

答案 2 :(得分:1)

您的SelectListItem课程需要覆盖EqualsGetHashCode(并可选择实施IEquatable<SelectListItem>)。否则,具有相同值的不同实例将被视为不同。

另一种选择是实施IEqualityComparer<SelectListItem>并将其作为第二个参数传递给Distinct