Работая в рамках ваших ограничений, я бы отсортировал массивы значений в каждом из тестовых классов, чтобы вы могли сделать что-то вроде:
int[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var results = from test in tests
where test.BinaryContains(values)
select test.id;
И тестовый класс будет выглядеть примерно так:
class Test
{
public int id;
public int[] vals; //A SORTED list of integers
public bool BinaryContains(int[] values)
{
for (int i = 0; i < values.Length; i++)
if (values[i] >= vals[0] && values[i] <= vals[vals.Length])
{
//Binary search vals for values[i]
//if match found return true
}
return false;
}
}
Конечно, есть множество способов, которыми вы могли бы оптимизировать это дальше. Если память не имеет значения, словарь может предоставить вам все тестовые классы, содержащие данное целое число.