#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)
?