Я просто изучаю лямбда-выражение, и я хочу использовать лямбда-выражение для выбора любого конкретного элемента. Здесь я хочу выбрать человека с ключом = 1, так что selectedOne = "sanjay"
var people = new Dictionary<int, string>();
people.Add(1, "sanjay");
people.Add(2, "roshan");
people.Add(3, "neejesh");
people.Add(4, "deep");
var selectedOne = people.Select(x => x.Key == 1);
Как мне построить свой лямбда-запрос?
Благодарю!
Dictionary
реализует IEnumerable
KeyValuePair
который содержит свойство Key
и Value
:
var selectedOne = people.First(x => x.Key == 1).Value;
Вы используете неправильный метод LINQ. Select
используется для проецирования некоторых значений (преобразование одного в другое). Вместо этого вам нужно отфильтровать (поиск по указанному ключу).
Но... использование LINQ для выбора словарного ключа неэффективно. Лучше:
var selectedOne = people[1];
Он амортизировал O (1) против O (n) - огромную разницу.
Вы хотите использовать вызов Where, чтобы отфильтровать набор результатов для человека, которого вы хотите, затем используйте "Выбрать", чтобы определить результаты, которые вы хотите, например
var selectedOne = people.Where(x => x.Key == 1).Select(x => x.Value).First();
Было бы гораздо эффективнее выполнять поиск по индексу словарей, как это было предложено pwas
Похоже, вы смешиваете концепцию Lambda Expression
и LINQ
. Вы использовали Lambda Expression
. Но если вам нужно использовать LINQ
первое условие - сбор данных, который вы используете, должен реализовывать интерфейс IEnumerable
например LIST<T>
Теперь напишите свой код LINQ
как:
var selectedOne = (from p in people
select p
where p.Key == "1").Single()
Код должен выглядеть примерно так:
var selectedOne = people.Single(x => x.Key == 1);
Это даст вам пару значений ключа. Если вы хотите только строку:
var selectedOne = people.Single(x => x.Key == 1).Value;
Where
а затем получите результат с помощьюSelect
.people[1]
?