У меня есть массив KeyValuePairs, подобный этому:
KeyValuePair<long,int>[] orderItems;
'Длинный' компонент этого KeyValuePair соответствует значению Id (первичного ключа) в таблице базы данных.
ИспользованиеВ Entity Framework я определил репозиторий, который предоставляет следующий интерфейс в своем интерфейсе:
IEnumerable<T> GetMany(Expression<Func<T, bool>> where);
Приведенный выше метод репозитория позволяет мне запрашивать базу данных, используя лямбда-выражения.Например, если я хочу запросить базу данных для всех строк, где столбец «Категория» равен «Камеры», я могу сказать следующее:
var results = repository.GetMany(a => a.Category.Contains("Cameras")).ToList();
Я хочу запросить все строки, где Id (Первичный ключ) равно значению Key из любого элемента массива KeyValuePairs.Поэтому, если список KeyValuePairs представляет собой список идентификаторов продуктов и их количества, я просто хочу запросить в базе данных все продукты, идентификаторы которых есть в моем массиве.
Может ли кто-нибудь найти подходящее лямбда-выражение?
** РЕДАКТИРОВАТЬ В ОРИГИНАЛ
Предложение использовать:
var results = repository.GetMany(a => keys.Any(x => x == a.Id)).ToList();
является хорошим и будет работать, если я сначала создам массив ключейиз массива KeyValuePair.Так что-то вроде этого:
long[] pids = new long[orderItems.Length];
for (int i = 0; i < orderItems.Length; i++ )
{
pids[0] = orderItems[i].Key;
}
var products = productRepository.GetMany(a => pids.Any(x => x == a.Id)).ToList();
Это показывает, что предложение 'Any' поддерживается EF.Я все еще не могу заставить это работать без использования массива longs все же.Престижность любому достаточно умному, чтобы дать решение, которое не требует, чтобы я сначала извлек значение 'key' из KeyValuePair в массив.
Если я использую ключи. Любое, я получаю следующее исключение:
"Невозможно создать постоянное значение типа 'System.Collections.Generic.IEnumerable`1'. Только примитивные типы (например, Int32, String и Guid) поддерживаются в этом контексте "