Подзапрос к Dictionary, Linq. Получить Max по Value, и Min по Key

138
10 июля 2018, 08:30

У меня спортивный интерес, как сделать следующий запрос более лаконичным. И вообще понять как осуществляются подзапросы в linq к такой коллекции как Dictionary.

Задача:

Получить из коллекции Dictionary<int,int> элемент с самым большим Value, если будет несколько элементов с максимальным Value, то получить все. Затем из полученной коллекции если элементов больше одного, взять тот у которого самый маленький Key.

Из-за своего невежества, я создал такого монстра, подскажите как сделать красиво и менее многословно,желательно все уместить в единый запрос, а не как у меня в два.

Dictionary<int,int> d = new Dictionary<int,int>();
var q1 = from a1 in d
         where a1.Value == d.Values.Max()
         select a1;
var q2 = (from a2 in q1
          where a2.Key == (from a3 in q1 select a3.Key).Min()
          select a2).First();
Answer 1

Вроде бы не монстр :) :

var result = d.OrderByDescending(n => n.Value).ThenBy(m => m.Key).First();

Или как вариант:

var result = (from n in d orderby n.Value descending, n.Key select n).First();
READ ALSO
Авторизация .Net

Авторизация .Net

У меня возник следущий вопрос: у IdentityServer4 есть AddSigningCredential, который можно использовать для добавления сертификата, который, в свою очередь,...

175
C# Внесение изменений в xml файл из txt файла

C# Внесение изменений в xml файл из txt файла

Есть два файла: Файл txt(файл источник), в котором 4 колонки и несколько строк

189
Убрать кнопку расширения в Toolbar

Убрать кнопку расширения в Toolbar

Можно ли убрать эту кнопку в ToolBar если они не требуется в данной ситуации?

202
System.InvalidOperationException при получении пикселя

System.InvalidOperationException при получении пикселя

Код выполняется в отдельном потоке, вычисляет средний цвет изображения и рисует его на Control'еПри получении цвета пикселя _bmp

176