Вам нужен набор объектов, представляющих ключи, которые вы хотите запросить.
class Key
{
int Id1 {get;set;}
int Id2 {get;set;}
Если у вас есть два списка, и вы просто проверяете, что каждое значение отображается в их соответствующем списке, тогда вы получаете декартову продукт списков, что, скорее всего, не то, что вы хотите. Вместо этого вам нужно запросить конкретные комбинации
List<Key> keys = // get keys;
context.Table.Where(q => keys.Any(k => k.Id1 == q.Id1 && k.Id2 == q.Id2));
Я не совсем уверен, что это действительное использование Entity Framework; у вас могут возникнуть проблемы с отправкой типа Key
в базу данных. Если это произойдет, вы можете быть творческими:
var composites = keys.Select(k => p1 * k.Id1 + p2 * k.Id2).ToList();
context.Table.Where(q => composites.Contains(p1 * q.Id1 + p2 * q.Id2));
Вы можете создать изоморфную функцию (простые числа хороши для этого), что-то вроде хэш-кода, который вы можете использовать для сравнения пары значений. Пока мультипликативные факторы являются совместными, этот шаблон будет изоморфным (взаимно однозначным), т. Е. Результат p1*Id1 + p2*Id2
однозначно идентифицирует значения Id1
и Id2
, если простые числа правильно выбран.
Но тогда вы оказываетесь в ситуации, когда вы реализуете сложные концепции, и кто-то должен будет это поддержать. Вероятно, лучше написать хранимую процедуру, которая принимает действительные ключевые объекты.