获得不同的SelectListItem

时间:2011-08-31 12:20:16

标签: asp.net-mvc-2 linq-to-objects

我使用Linq只获取选择List项的唯一成员。我该如何返回此列表... 我现在拥有的是

    var queryResult = PatientList.Select(c => c).Distinct();
    PatientList = (List<SelectListItem>)queryResult;

我在第二行收到施法错误。一个有进取心的年轻开发者应该做些什么?

2 个答案:

答案 0 :(得分:1)

尝试

PatientList = queryResult.ToList();

您的版本使用强制转换,在这种情况下这是不可能的,因为查询结果不是列表。 ToList根据调用它的枚举构造一个新列表。它做了这样的事情:

public static List<T> ToList<T>(this IEnumerable<T> collection)
{
    return new List<T>(collection);
}

显然,您必须确定PatientList元素的类型为SelectListItem,并且请注意Distinct()将返回不同的OBJECTS,但不会返回具有不同字段的项目。也就是说,如果在PatientList中你有两个独立构造的项目具有相同的SelectedTextValue属性,那么Distinct()的结果仍然会有两个打电话。

此外,使用Select(c => c)的原因是什么?它有效地注意到了。

答案 1 :(得分:1)

我不知道列表中的项目类型,但是您发布的内容可以直接在列表中调用Distinct()

  List<int> ages = new List<int> { 21, 46, 46, 55, 17, 21, 55, 55 };

    IEnumerable<int> distinctAges = ages.Distinct();

如果您需要将其转换为列表

,请添加.ToList()