2012-10-17 15 views
15
codifica

Am su Visual Studio 2012 e utilizzando modello entità come il mio livello di Data. Tuttavia, il mio controllo a discesa con l'istruzione Linq tende a generare un'eccezione non gestita quando la pagina tenta di caricare (titolo indicato sopra). Ecco il mio codice qui sotto;Associazione dati direttamente a una query negozio (DbSet, DBQuery, DbSqlQuery) non è supportata

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. voglio sapere il motivo per cui si è verificato che l'errore
  2. quello che dovrebbe essere il modo corretto di legarsi a un controllo quando si utilizza LINQ?
+2

Aiuta se pubblichi anche l'errore. – Max

+0

@Max Il titolo della domanda ** è ** l'errore (anche se non è incredibilmente chiaro) –

risposta

34

L'errore è abbastanza chiaro: non è possibile eseguire il binding diretto ai risultati della query, ma è necessario popolare una raccolta locale.

Il modo più semplice per farlo è quello di convertirlo in un List<T>, tramite ToList():

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

Grazie ... Ma ora un altro problema il fatto che la nuova istruzione LINQ sta lanciando lo stesso errore (da em in dw.Employees selezionare new {em.Title, em.EmployeeID}). Distinct(). OrderBy (nome => nome) ... Please help me – Oluwafemi

+0

@ user1753728 Sembra un altro problema. Lo chiederei come una domanda separata, con dettagli, incluso il codice. (A parte la battuta, però, stai ordinando per l'intera classe anonima, che probabilmente non è proprio quello che vuoi ...) –

+0

Non è quello che voglio, ho solo bisogno degli oggetti unici della fonte. – Oluwafemi

3

Oppure, se si vuole evitare di scrivere un'espressione LINQ si può solo fare questo:

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