Подзапрос к локальному списку с использованием ObjectQuery

#vb.net #linq #entity-framework

#vb.net #linq #entity-framework

Вопрос:

Мне нужно найти все записи, статус которых находится в локальном списке целых чисел. В SQL я бы сделал

 Where Status in (select i from my list)
  

Но я не могу понять, как это сделать в Linq.

 ListData = New IssueTrackerEntities2()

Dim queryString As String = "SELECT VALUE CallList FROM IssueTrackerEntities2.CallList AS CallList"

    Dim Status As New List(Of Integer)

    queryString  = "Where CallList.AssignToValue = @AssignTo"

    Dim TicketQuerys As New ObjectQuery(Of CallList)(queryString, ListData)

    TicketQuerys.Parameters.Add(New ObjectParameter("AssignTo", AssignToFilter.EditValue))
  

Ответ №1:

Метод Contains extension — это оператор, который вы ищете.

 int[] localList = {1, 2, 3, 4};
var allItems = GetAllItems();
var filteredItems = from i in allItems where localList.Contains(i.Status) select i;
  

Комментарии:

1. LINQ to Entities не распознает метод ‘Boolean Contains(Int32)’, и этот метод не может быть преобразован в выражение хранилища.

2. Коллекция, для которой вы бы вызвали метод Contains, должна была бы реализовывать IEnumerable (например, собственная коллекция списков).

3. Какое выражение LINQ в данный момент генерирует ошибку?

4. Затемнить filteredItems = Из i в TicketQuerys. Статус AsEnumerable Where. Содержит (i.Status) Выберите i

5. Как определяется переменная «Status»? Как указано выше? List (of Integer) ?