Asp.net mvc 2 获取不同的SelectListItem

Asp.net mvc 2 获取不同的SelectListItem,asp.net-mvc-2,linq-to-objects,Asp.net Mvc 2,Linq To Objects,我正在使用Linq获取选择列表项的唯一成员。如何返回此列表中的。。。 我现在拥有的是 var queryResult = PatientList.Select(c => c).Distinct(); PatientList = (List<SelectListItem>)queryResult; var queryResult=PatientList.Select(c=>c.Distinct(); PatientList=(列表)queryResult; 我

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

    var queryResult = PatientList.Select(c => c).Distinct();
    PatientList = (List<SelectListItem>)queryResult;
var queryResult=PatientList.Select(c=>c.Distinct();
PatientList=(列表)queryResult;
我在第二行遇到了一个投射错误。一个有进取心的年轻开发人员应该做什么?

试试看

PatientList = queryResult.ToList();
您的版本使用强制转换,这在本例中是不可能的,因为查询结果不是列表
ToList
根据调用它的可枚举项构造一个新列表。它是这样做的:

public static List<T> ToList<T>(this IEnumerable<T> collection)
{
    return new List<T>(collection);
}
公共静态列表列表(此IEnumerable集合)
{
返回新列表(集合);
}
显然,您必须确保
PatientList
元素的类型为
SelectListItem
,并注意
Distinct()
将返回不同的对象,但不会返回具有不同字段的项。也就是说,如果在
PatientList
中,您有两个独立构造的项,它们具有相同的
选择的
文本
属性,则调用
Distinct()
后,您仍将有两个项


另外,使用
Select(c=>c)
的原因是什么?它实际上没有什么作用。

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

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

    IEnumerable<int> distinctAges = ages.Distinct();
List ages=新列表{21,46,46,55,17,21,55,55};
IEnumerable distinctAges=ages.Distinct();

添加
.ToList()
如果您需要将其转换为列表

我是一个Linq noob。尽管如此,我发现它非常有用。当我删除它时,我得到一个编译器错误。它看起来好像我没有得到唯一不同的SelectListItems