21

我在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 时绑定到控件的正确方法应该是什么?
4

3 回答 3

51

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

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

 ddlCon.DataSource = (from em in dw.Employees
                             select new { em.Title, em.EmployeeID }).ToList();
于 2012-10-17T16:02:37.530 回答
7

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

var dbContext = new EF.CustomerEntities();
gvCustomers.DataSource = dbContext.CustomersTable.ToList();
于 2015-01-14T08:12:09.837 回答
0

虽然这个问题已经得到了回答,但我想表明你甚至可以直接从消息框中得到答案(我得到了同样的错误) 错误对话框图像

using (var retrive=new Models.Academy_MSDBEntities())
        {
            var query = retrive.Students.Where(s => s.Year == year).ToList();
            return query;
        }
于 2019-04-05T20:34:25.523 回答