2012-09-03 35 views
6

Uso Visual Studio 2012 C Sharp (C#) y SQL Server Express. Estoy tratando de realizar el Tutorial de MSDN: mostrar datos de una base de datos de SQL Server en un control DataGrid. He agregado la base de datos de ejemplo AdventureWorksLT2008 recomendada. Estas son las instrucciones que seguí:No se puede convertir implícitamente el tipo System.Data.Entity.DbSet <DataGridSQLExample.Product> en System.Data.Objects.ObjectQuery <DataGridSQLExample.Product>

  1. Cree un nuevo proyecto de aplicación WPF en Visual Basic o C#, y asígnele el nombre DataGridSQLExample.
  2. En el Explorador de soluciones, haga clic con el botón derecho en su proyecto, señale Agregar y luego seleccione Nuevo elemento. (Aparecerá el cuadro de diálogo Agregar nuevo elemento).
  3. En el panel Plantillas instaladas, seleccione Datos y en la lista de plantillas, seleccione el Modelo de datos de la entidad ADO.NET.
  4. Denomine el archivo AdventureWorksModel.edmx y luego haga clic en Agregar. (Aparece el asistente de modelo de datos de entidad.)
  5. En la pantalla Elegir contenido del modelo, seleccione Generar desde la base de datos y luego haga clic en Siguiente.
  6. En la pantalla Elija su conexión de datos, proporcione la conexión a su base de datos AdventureWorksLT2008.
  7. Asegúrese de que el nombre sea AdventureWorksLT2008Entities y que la configuración de conexión de entidad Guardar en App.Config como casilla de verificación esté seleccionada, y luego haga clic en Siguiente.
  8. En la pantalla Elija su objeto de base de datos, expanda el nodo Tablas y seleccione las tablas Product y ProductCategory.
  9. Haga clic en Terminar.

para recuperar y presentar los datos:

  1. Abrir el archivo MainWindow.xaml.
  2. establecer la propiedad Ancho de la ventana a 450.
  3. En el editor XAML, agregue la etiqueta siguiente cuadrícula de datos entre los <Grid> y </Grid> etiquetas para agregar una cuadrícula de datos llamado dataGrid1.
  4. Seleccione la ventana.
  5. Utilizando la ventana Propiedades o el editor XAML, cree un controlador de eventos para la Ventana denominada Window_Loaded para el evento Cargado.
  6. Abra el archivo de código subyacente (MainWindow.xaml.vb o MainWindow.xaml.cs) para la ventana.
  7. Agregue el código siguiente para recuperar los valores específicos de los solamente tablas unidas y establezca la propiedad ItemsSource de la cuadrícula de datos con los resultados de la consulta:

    using System; 
    using System.Collections.Generic; 
    using System.Data.Objects; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Windows; 
    using System.Windows.Controls; 
    using System.Windows.Data; 
    using System.Windows.Documents; 
    using System.Windows.Input; 
    using System.Windows.Media; 
    using System.Windows.Media.Imaging; 
    using System.Windows.Navigation; 
    using System.Windows.Shapes; 
    
    
    namespace DataGridSQLExample 
    { 
        /// <summary> 
        /// Interaction logic for MainWindow.xaml 
        /// </summary> 
        public partial class MainWindow : Window 
        { 
         AdventureWorksLT2008Entities dataEntities = new AdventureWorksLT2008Entities(); 
    
         public MainWindow() 
         { 
          InitializeComponent(); 
         } 
    
         private void Window_Loaded(object sender, RoutedEventArgs e) 
         { 
          ObjectQuery<Product> products = dataEntities.Products; 
    
          var query = 
          from product in products 
          where product.Color == "Red" 
          orderby product.ListPrice 
          select new { product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice }; 
    
          dataGrid1.ItemsSource = query.ToList(); 
         } 
        } 
    } 
    
  8. ejecutar el ejemplo. Debería ver un DataGrid que muestra datos.

Cuando corro me sale este error:

Cannot implicitly convert type 'System.Data.Entity.DbSet' to 'System.Data.Objects.ObjectQuery' on this line: ObjectQuery products = dataEntities.Products;

obras Nada de lo que he intentado - alguna sugerencia?

Respuesta

7

Se puede utilizar directamente, no es necesario para emitir

var query = 
    from product in dataEntities.Products 
    where product.Color == "Red" 
    orderby product.ListPrice 
    select new { product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice }; 

Nota:

ObjectQuery representa una consulta típica que se ejecuta en un modelo conceptual en el contexto de un objeto dado.

dataEntities.Products representa el conjunto de datos

+2

Sí, eso ciertamente funcionó. Estoy confundido sobre por qué Microsoft usó la línea ofensiva en su Tutorial (aunque, por ahora, no debería estarlo. Gracias. – user1643977

+0

Me complace ayudarlo user1643977 –

+0

Tenía el mismo problema. Qué cosa más curiosa para Microsoft hacer. –

Cuestiones relacionadas