web-dev-qa-db-ja.com

ストアクエリ(DbSet、DbQuery、DbSqlQuery)への直接データバインディングはサポートされていません

visual studio 2012をコーディングし、Entity Modelをデータレイヤーとして使用しています。ただし、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を使用するときにコントロールにバインドする適切な方法は何ですか?
18
Oluwafemi

エラーはかなり明確です。クエリ結果に直接バインドすることはできませんが、代わりにローカルコレクションを設定する必要があります。

これを行う最も簡単な方法は、ToList()を介してList<T>に変換することです。

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

または、LINQ式の記述を避けたい場合は、次のようにします。

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

この質問はすでに回答されていますが、メッセージボックスから直接回答を取得することもできることを示したいと思います(同じエラーが発生しました) エラーダイアログボックスの画像

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