Как выделить один объект с помощью Linq в vb.net - PullRequest
2 голосов
/ 19 марта 2011

Я много занимался поиском того, что кажется простой проблемой LINQ, но я не могу понять, как извлечь объект из коллекции, которая имеет указанное минимальное (или максимальное значение), не прибегая ксортируйте так:

dim customers= GetCustomers()

dim youngest = (From c in customers
                 Order By c.age Ascending).ToList.First

Эта структура (непроверенный код) работает нормально, за исключением того, что весь массив клиентов должен быть отсортирован и помещен в список только с целью извлечения первого значения.Это не может быть лучшим способом получить минимум!

Обратите внимание, что в этом случае мне нужна вся запись c, , а не минимальный возраст клиента, который можно сделать таким образом.(типичный пример):

dim customers= GetCustomers()

dim youngest = (From c in customers
                 Select c.age).Min

Или даже

dim customers= GetCustomers()

dim youngest = (From c in customers
                 Select c).Min(Function(x) x.age)

Я не могу понять, как получить весь объект (или даже индекс) безприбегая к роду ...

Ответы [ 3 ]

5 голосов
/ 19 марта 2011

Опять же, код C #, я не уверен, что правильно понял в VB.NET

C #

  Customer youngest = customers.Aggregate((c1, c2) => (c1.age < c2.age) ? c1 : c2);

VB.NET

  dim youngest = customers.Aggregate( Function(ByVal c1, ByVal c2) IF( (c1.age < c2.age) , c1 , c2  ) );
1 голос
/ 19 марта 2011

В обычном LINQ нет такого оператора, который бы позволил избежать сортировки всего IEnumerable. Но вы не первый, кто нуждается в решении. Например, посмотрите ответ Джейсона здесь (хотя это MaxBy и C #, но вы получите представление): Простой вопрос LINQ на C #

Или MinBy из MoreLinq

0 голосов
/ 19 марта 2011

Вы почти у цели.Вы должны найти, что

dim youngest = (From c in customers
                Order By c.age Ascending
                Select c).First

делает то, что вы ищете.(Я парень на C #, а не на VB.NET, так что мой синтаксис может быть немного неправильным.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...