Первый элемент в сгруппированном списке без использования лямбды? - PullRequest
0 голосов
/ 02 июня 2011

Предположим, у меня есть объект с "id" и "name".Мой список состоит из следующих пунктов:

id = 1, name = "Bob"
id = 2, name = "Bob"
id = 3, name = "Chris"
id = 4, name = "Chris"
id = 5, name = "Paul"

Как я могу получить подмножество этого списка, которое вернуло бы мне пункты 1, 3 и 5 (то есть первое вхождение имени), но определенно без лямбды.

Я думаю, что это лямбда-решение
items.GroupBy(item => item.UniqueIdentifier).Distinct().Select(item => item.First()).ToList();
, но мне специально запрещено использовать лямбда-решения для этого решения (нет, это не в школе ... это на самом делерабочая среда)

РЕДАКТИРОВАТЬ
Я только что понял, что, вероятно, я могу сделать это в своем операторе LINQ, который получает мне этот список с этим кодом.

(from t in this.ObjectContext.MYTABLE
    group t by t.UniqueIdentifier into theGroup
    select theGroup.First()).ToList();

Будет ли это работать?

Ответы [ 2 ]

3 голосов
/ 02 июня 2011

Вы можете просто выполнить итерацию коллекции, запомнить все имена, которые вы видели, и всякий раз, когда вы видите новое имя, принимайте идентификатор.

var seen = new HashSet<string>();
foreach (var item in items)
{
    if (!seen.Add(item.name))
    {
        Console.WriteLine(item.id);
    }
}

Выход:

1
3
5
0 голосов
/ 02 июня 2011

Это решение отлично работает:

(from t in this.ObjectContext.MYTABLE
group t by t.UniqueIdentifier into theGroup
select theGroup.First()).ToList();
...