Как использовать Linq для получения уникального списка свойств из списка объектов? - PullRequest
163 голосов
/ 20 февраля 2009

Я пытаюсь использовать Linq, чтобы вернуть список идентификаторов, учитывая список объектов, где идентификатор является свойством. Я хотел бы иметь возможность делать это, не просматривая каждый объект и не извлекая уникальные идентификаторы, которые я нахожу.

У меня есть список объектов типа MyClass, и одним из свойств этого класса является идентификатор.

public class MyClass
{
  public int ID { get; set; }
}

Я хочу написать запрос Linq, чтобы получить список этих идентификаторов

Как мне сделать это, учитывая IList<MyClass>, что он возвращает IEnumerable<int> идентификаторов?

Я уверен, что должна быть возможность сделать это в одну или две строки, используя Linq, вместо того, чтобы перебирать каждый элемент списка MyClass и добавлять уникальные значения в список.

Любая помощь в создании элегантного решения будет высоко ценится!

Ответы [ 4 ]

301 голосов
/ 20 февраля 2009
IEnumerable<int> ids = list.Select(x=>x.ID).Distinct();
28 голосов
/ 20 февраля 2009

Используйте оператор Distinct :

var idList = yourList.Select(x=> x.ID).Distinct();
13 голосов
/ 01 июля 2010

Используя прямой Linq , с расширением Distinct():

var idList = (from x in yourList select x.ID).Distinct();
3 голосов
/ 08 октября 2010
        int[] numbers = {1,2,3,4,5,3,6,4,7,8,9,1,0 };
        var nonRepeats = (from n in numbers select n).Distinct();


        foreach (var d in nonRepeats)
        {

            Response.Write(d);
        }

OUTPUT

1234567890

...