Код, который вы дали, должен работать абсолютно нормально, если вы действительно хотите найти записей , где значение имеет частичное совпадение. Если вы видите что-то еще, я подозреваю, что ваша диагностика ошибочна. Если вы хотите найти записи, в которых клавиша имеет частичное совпадение, просто поменяйте местами
a.Where(d => d.Value.Contains(text))
для
a.Where(d => d.Key.Contains(text))
Короткая, но полная программа, демонстрирующая код, который вы дали работающему:
using System;
using System.Collections.Generic;
using System.Linq;
class Test
{
static void Main()
{
var original = new Dictionary<string, string> {
{ "a", "foo" },
{ "b", "bar" },
{ "c", "good" },
{ "d", "bad" },
};
string needle = "oo";
var filtered = original.Where(d => d.Value.Contains(needle))
.ToDictionary(d => d.Key, d => d.Value);
foreach (var pair in filtered)
{
Console.WriteLine("{0} => {1}", pair.Key, pair.Value);
}
}
}
Выход:
a => foo
c => good