Как я могу сделать выбор в linq для объектов, чтобы выбрать строки с ключами из списка? Что-то вроде этого:
var orderKeys = new int[] { 1, 12, 306, 284, 50047};
var orders = (from order in context.Orders
where (order.Key in orderKeys)
select order).ToList();
Assert.AreEqual(orderKeys.Count, orders.Count);
Я попытался использовать метод Contains, как упоминалось в некоторых ответах, но он не работает и выдает это исключение:
LINQ to Entities не распознает метод «Boolean Contains [Int32] (System.Collections.Generic.IEnumerable`1 [System.Int32], Int32)», и этот метод нельзя преобразовать в выражение хранилища.
Попробуй это:
var orderKeys = new int[] { 1, 12, 306, 284, 50047};
var orders = (from order in context.Orders
where orderKeys.Contains(order.Key);
select order).ToList();
Assert.AreEqual(orderKeys.Count, orders.Count);
Изменить: я нашел несколько обходных путей для этой проблемы - пожалуйста, смотрите пункт ГДЕ В? :
Entity Framework в настоящее время не поддерживает параметры со значениями коллекций ('statusesToFind' в вашем примере). Чтобы обойти это ограничение, вы можете вручную построить выражение с учетом последовательности значений, используя следующий служебный метод:
У меня была такая же проблема, и я решил так
var orderKeys = new int[] { 1, 12, 306, 284, 50047};
var orders = (from order in context.Orders
where (orderKeys.Contains(order.Key))
select order).ToList();
Assert.AreEqual(orderKeys.Count, orders.Count);