Связывание данных непосредственно с запросом хранилища (DbSet, DbQuery, DbSqlQuery) не поддерживается

Кодирование на visual studio 2012 и использование Модели сущностей в качестве моего слоя данных. Тем не менее, мой выпадающий элемент управления с выражением Linq обычно бросает необработанное исключение, когда страница пытается загрузить (указанный выше заголовок). Вот мой код ниже;

using (AdventureWorksEntities dw = new AdventureWorksEntities())
        {
            ddlCon.DataSource = (from em in dw.Employees
                                 select new { em.Title, em.EmployeeID });

            ddlCon.DataTextField = "Title";
            ddlCon.DataValueField = "EmployeeID";
            ddlCon.DataBind();
            ddlCon.Items.Insert(0, new ListItem("--Select--", "--Select--"));
        }
  • Я хочу знать, почему произошла эта ошибка.
  • Каким должен быть правильный способ привязки к элементу управления при использовании LINQ?

Ответы

Ответ 1

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

Самый простой способ сделать это - преобразовать его в List<T> через ToList():

 ddlCon.DataSource = (from em in dw.Employees
                             select new { em.Title, em.EmployeeID }).ToList();

Ответ 2

Или, если вы хотите избежать выражения выражения LINQ, вы можете просто сделать это:

var dbContext = new EF.CustomerEntities();
gvCustomers.DataSource = dbContext.CustomersTable.ToList();

Ответ 3

хотя на этот вопрос уже был дан ответ, я хочу показать, что вы даже можете получить ответ прямо из окна сообщения (я получил ту же ошибку) ОШИБКА ДИАЛОГ КОРОБКА ИЗОБРАЖЕНИЕ

using (var retrive=new Models.Academy_MSDBEntities())
        {
            var query = retrive.Students.Where(s => s.Year == year).ToList();
            return query;
        }