Словарь запросов Linq, где значение в списке
У меня есть Dictionary<string, string>
и еще List<string>
. То, что я пытаюсь достичь, - это запрос linq, чтобы получить все элементы из словаря, где любые значения из указанного словаря находятся в List<string>
.
Я нашел этот пост полезным, LINQ, запрашивающий словарь против списка. И смог написать следующее выражение linq, однако мои результаты никогда ничего не вернули.
Что я до сих пор.
Data
- словарь, а PersonList
- список строк.
var Persons = PersonList.Where(x => Data.ContainsKey(x))
.Select(z => new { key = z, value = Data[z] })
.ToList();
Ответы
Ответ 1
Вы ищете ключи или значения? Если вы ищете значения, используйте
var Persons = Data.Where(kvp => PersonList.Contains(kvp.Value))
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
Если вместо этого вам действительно нужны ключи, тогда ваш код должен работать, но другой вариант:
var Persons = Data.Where(kvp => PersonList.Contains(kvp.Key))
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
Ответ 2
Попробуйте следующее:
var Persons = Data.Where(x=>PersonList.Contains(x.Value))
.Select(x=>new { key=x.Key, value=x.Value})
.ToList();
Я преобразовал результат в список, потому что заметил, что вы использовали его в своем коде. Если вы хотите, чтобы он был в словаре, просто взгляните на ответ, предоставленный D Stanley.
Ответ 3
Я думаю, что вам не нужно преобразовывать его в ToDictionary, потому что ваш источник - это словарь:
var Persons = Data.Where(kvp => personList.Contains(kvp.Key))
.Select(x => x);
Я быстро протестировал его в LinqPad, но если это плохая идея или я ошибаюсь, оставьте комментарий.