2013-07-15 2 views
1

Я получил множество запросов LINQ внутри из для петель, которые выглядят следующим образом:LINQ запрос с элементами массива в тех случаях, когда пункт

Department department = db.Departments.Single(d => d.DepartmentID == teams[i].DepartmentID); 

Проблема заключается в LINQ не любит сравнения с элементом массива и бросает исключение LINQ to Entities не распознает метод get_Item (Int32). Есть ли лучший способ обойти это, помимо объявления локальных переменных для каждого из свойств в списке команд, который я хочу выбрать против? Я хотел бы избежать заполнения My для петель с вещами как

int departmentID = teams[i].DepartmentID; 
string teamName = teams[i].TeamName; 

т.д.

ответ

7

Я хотел бы избежать заполнения моим о петлях с такими вещами, как ...

К сожалению, это, как правило, лучший вариант. Оценка выражения должна иметь возможность преобразовать дерево выражений в SQL, и он не знает, как обрабатывать элементы массива. Создание временных переменных - это самый простой и удобный способ справиться с этим сценарием.

5

Я не знаю, что это исправит вашу проблему, но вы можете попробовать изменить цикл for на каждый цикл, чтобы у вас была ссылка на текущий объект, а не на доступ к нему по индексу. Проблема заключается в том, что SQL Server не имеет представления о том, что такое массив, когда вы пытаетесь использовать этот действительный синтаксис C#, он не знает, как перевести его в дерево выражений для создания необходимого SQL. Если для каждого предложения не работает, я думаю, вы застряли, делая это, как вы сейчас.

+0

Обычно я бы хотел. Однако в этом случае я индексирую 13 различных массивов в цикле for. – Legion

+0

@ Легион, это несчастливо. Я не думаю, что есть какие-то варианты лучше, чем назначать локальные переменные. – evanmcdonnal

0

Почему бы вам не написать что-то вроде этого:

var query = from d in db.Departments 
       from t in teams 
       where d.DepartmentID == t.DepartmentID && d.Team == t.TeamName 
       select d; 

Это может быть легко преобразован в дерево выражений и, наконец, SQL.

Смежные вопросы