无法将System.Data.Entity.DbSet <datagridsqlexample.product>类型隐式转换为System.Data.Objects.ObjectQuery <datagridsqlexample.product> </datagridsqlexample.product> </datagridsqlexample.product>

时间:2012-09-03 18:08:57

标签: sql database visual-studio-2012

我正在使用Visual Studio 2012 C Sharp(C#)和SQL Server Express。我正在尝试通过MSDN演练:在DataGrid控件中显示来自SQL Server数据库的数据。我添加了推荐的AdventureWorksLT2008示例数据库。以下是我遵循的说明:

  1. 在Visual Basic或C#中创建一个新的WPF应用程序项目,并将其命名为DataGridSQLExample。
  2. 在“解决方案资源管理器”中,右键单击项目,指向“添加”,然后选择“新建项”。 (出现“添加新项”对话框。)
  3. 在“已安装的模板”窗格中,选择“数据”,然后在模板列表中选择“ADO.NET实体数据模型”。
  4. 将文件命名为AdventureWorksModel.edmx,然后单击“添加”。 (出现实体数据模型向导。)
  5. 在Choose Model Contents屏幕中,选择Generate from database,然后单击Next。
  6. 在“选择您的数据连接”屏幕中,提供与AdventureWorksLT2008数据库的连接。
  7. 确保名称为AdventureWorksLT2008Entities,并选中“App.Config中的保存实体连接设置”复选框,然后单击“下一步”。
  8. 在Choose Your Database Objects屏幕中,展开Tables节点,然后选择Product和ProductCategory表。
  9. 单击“完成”。
  10. 检索并呈现数据:

    1. 打开MainWindow.xaml文件。
    2. 将窗口上的Width属性设置为450。
    3. 在XAML编辑器中,在<Grid></Grid>标记之间添加以下DataGrid标记,以添加名为dataGrid1的DataGrid。
    4. 选择窗口。
    5. 使用“属性”窗口或XAML编辑器,为已加载事件的名为Window_Loaded的窗口创建一个事件处理程序。
    6. 打开窗口的代码隐藏文件(MainWindow.xaml.vbMainWindow.xaml.cs)。
    7. 添加以下代码以仅从连接表中检索特定值,并将DataGrid的ItemsSource属性设置为查询结果:

      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. 运行示例。您应该看到一个显示数据的DataGrid。
    9. 当我跑步时,我收到此错误:

        

      无法将类型'System.Data.Entity.DbSet'隐式转换为   'System.Data.Objects.ObjectQuery' on   这一行: ObjectQuery products = dataEntities.Products;

      我没有尝试过任何建议 - 有什么建议吗?

2 个答案:

答案 0 :(得分:7)

你可以直接使用,你不需要施放

    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表示在给定对象的上下文中对概念模型执行的典型查询。

dataEntities.Products表示数据集

答案 1 :(得分:1)

我意识到这确实很老,但是您也可以执行以下操作:

更改:

using System.Data.Objects;

收件人:

using System.Data.Entity;

并更改:

ObjectQuery&lt;Product&gt; products = dataEntities.Products;

收件人:

DbSet&lt;Product&gt; products = dataEntities.Products;