Присоединитесь к двум словарям с помощью общего ключа

Я пытаюсь присоединиться к двум наборам Словаря вместе на основе общего справочного значения.

var idList = new Dictionary<int, int>();
idList.Add(1, 1);
idList.Add(3, 3);
idList.Add(5, 5);

var lookupList = new Dictionary<int, int>();
lookupList.Add(1, 1000);
lookupList.Add(2, 1001);
lookupList.Add(3, 1002);
lookupList.Add(4, 1003);
lookupList.Add(5, 1004);
lookupList.Add(6, 1005);
lookupList.Add(7, 1006);

// Something like this:
var q = from id in idList.Keys
        join entry in lookupList on entry.Key equals id
        select entry.Value;

Оператор Linq выше является только примером и не компилирует. Для каждой записи в самом неактивном вытяните значение от lookupList на основе соответствия Ключам.

Результатом должен быть список Значений от lookupList (1000, 1002, 1004).

Что самый легкий путь состоит в том, чтобы сделать это использование Linq?

5
задан Uwe Keim 19 March 2018 в 08:53
поделиться

4 ответа

from id in idList.Keys
where lookupList.ContainsKey(id)
let value1 = idList[id]
let value2 = lookupList[id]
select new {id, value1, value2}

Или, более классически

from kvp1 in idList
join kvp2 in lookupList on kvp1.Key equals kvp2.Key
select new {key = kvp1.Key, value1 = kvp1.Value, value2 = kvp2.Value}

Ошибка в вашем запросе связана с определением области видимости:

from a in theAs
join b in theBs on (leftside) equals (rightside)

a находится в области видимости в левой области. b находится в области действия в правой области.

16
ответ дан 18 December 2019 в 09:47
поделиться

Прошу прощения, если я неправильно истолковал ваш вопрос, но вы просто хотите получить значения из списка B только тогда, когда в списке A есть KeyValuePair с тем же ключом?

from lookup in lookupList
where idList.Keys.Contains(lookup.Key)
select lookup.Value;
1
ответ дан 18 December 2019 в 09:47
поделиться
        var q = from id in idList
                join entry in lookupList
                  on id.Key equals entry.Key
                select entry.Value;

Ваш желаемый оператор linq будет выглядеть так: ID и Entry нужно поменять местами в зависимости от условия.

0
ответ дан 18 December 2019 в 09:47
поделиться

Что вы думаете об этом?

var values = idList.Keys.Select(i => lookupList[i]);
0
ответ дан 18 December 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: