Получение отличного SelectListItem - PullRequest
0 голосов
/ 31 августа 2011

Я использую Linq, чтобы получить только уникального члена выбранного элемента списка.Как мне вернуть этот список ... Теперь у меня есть

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

Я получаю ошибку приведения во второй строке.Что должен предпринять предприимчивый молодой разработчик?

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Я не знаю, какой тип элемента в вашем списке, но за то, что вы опубликовали, вы можете позвонить Distinct() прямо в список

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

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

Добавление .ToList(), если вам нужно конвертироватьэто к списку

1 голос
/ 31 августа 2011

Попробуйте

PatientList = queryResult.ToList();

Ваша версия использует приведение, что в данном случае невозможно, так как результат запроса не является списком.ToList создает новый список, основываясь на перечислимом, для которого он вызывается.Он делает что-то вроде этого:

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

Очевидно, вы должны быть уверены, что PatientList элементы имеют тип SelectListItem и знать, что Distinct() вернет различные ОБЪЕКТЫ, но не элементы сразные поля.То есть, если в PatientList у вас есть два независимо сконструированных элемента с равными свойствами Selected, Text и Value, у вас все равно останется два в результате вызова Distinct()., что является причиной использования Select(c => c)?Это эффективно не замечая.

...