Удаление общих настроек

Вам нужен набор объектов, представляющих ключи, которые вы хотите запросить.

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, если простые числа правильно выбран.

Но тогда вы оказываетесь в ситуации, когда вы реализуете сложные концепции, и кто-то должен будет это поддержать. Вероятно, лучше написать хранимую процедуру, которая принимает действительные ключевые объекты.

452
задан Andrew 11 September 2010 в 05:34
поделиться