LINQ 2 Объекты, имеющие предложение - PullRequest
0 голосов
/ 20 апреля 2011

Учитывая коллекцию MyType {int Index, string Name}, каким был бы технически эффективный способ получения элементов индекса Min / Max?

мы используем:

MyType minIndexItem = items.Single(t=>
   t.Index == items.Min(t=>
      t.Index));

, который невыглядит не совсем элегантно.Мы также хотели бы придерживаться лямбда-синтаксиса и ищем наиболее технически эффективный подход, а не такие вещи, как сахар, такие как методы расширения и т. Д.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 20 апреля 2011

Сортировка будет простым способом сделать это для LINQ-to-RDBMS, но, вероятно, не для LINQ-to-Objects, потому что сортировка может быть дорогой и выполняется в O (nlogn).Вы можете использовать агрегацию LINQ, чтобы получить самый низкий или самый высокий.Это проходит через всю коллекцию ровно один раз, a всегда O (n).Например, чтобы получить самый низкий пункт:

items.Aggregate((current, next) => next.Index < current.Index ? next : current);
0 голосов
/ 20 апреля 2011

Это может быть

  (from item in items select item order by item.Index).First() 

Довольно быстро, если поле Index имеет индекс db.

...