Подтвердить что ты не робот

Как выполнить запрос "in" в структуре сущностей?

Как я могу сделать выбор в 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" Содержит метод [Int32] (System.Collections.Generic.IEnumerable1) [System.Int32], Int32), и этот метод не может быть переведен в выражение хранилища.

4b9b3361

Ответ 1

Попробуйте следующее:

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);

Изменить: Я нашел некоторые обходные пути для этой проблемы - см. WHERE IN clause?

В Entity Framework нет в настоящее время поддерживают параметров ('statusesToFind' в вашем пример). Чтобы обойти это ограничение, вы можете вручную построим выражение, заданное последовательность значений, используя следующие полезный метод:

Ответ 2

У меня была та же проблема, и я решил, как это сделать

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);

Ответ 3

К сожалению, EF не может перевести запросы, которые другие предложили. Поэтому, пока эти запросы будут работать в LINQ to Objects, они не будут работать в LINQ для Entities.

Итак, решение немного более активно.

Однако у меня есть сообщение в блоге по этой точной теме here. По сути, решение заключается в использовании магии дерева выражений для создания большого выражения OR.

Надеюсь, что это поможет

Алекс