不支持直接绑定到商店查询(DbSet,DbQuery,DbSqlQuery)的数据

时间:2012-10-17 15:55:30

标签: c# linq visual-studio data-binding entity

我在 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--"));
        }
  1. 我想知道发生错误的原因
  2. 使用LINQ时绑定到控件的正确方法是什么?

3 个答案:

答案 0 :(得分:43)

错误相当明确 - 您不能直接绑定到查询结果,而是需要填充一些本地集合。

最简单的方法是通过List<T>将其转换为ToList()

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

答案 1 :(得分:6)

或者如果你想避免编写LINQ表达式,你可以这样做:

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

答案 2 :(得分:0)

尽管这个问题已经回答了,但我还是想表明您甚至可以直接从消息框中获得答案(我也遇到了同样的错误) ERROR DIALOGUE BOX IMAGE

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