7

Visual Studio 2012 C Sharp (C#) と SQL Server Express を使用しています。MSDN ウォークスルー: SQL Server データベースのデータを DataGrid コントロールに表示しようとしています。推奨される AdventureWorksLT2008 サンプル データベースを追加しました。私が従った指示は次のとおりです。

  1. Visual Basic または C# で新しい WPF アプリケーション プロジェクトを作成し、DataGridSQLExample という名前を付けます。
  2. ソリューション エクスプローラーでプロジェクトを右クリックし、[追加] をポイントして、[新しい項目] を選択します。( [新しい項目の追加] ダイアログ ボックスが表示されます。)
  3. [インストールされたテンプレート] ウィンドウで [データ] を選択し、テンプレートの一覧で [ADO.NET Entity Data Model] を選択します。
  4. ファイルに名前を付けてAdventureWorksModel.edmx、[追加] をクリックします。(エンティティ データ モデル ウィザードが表示されます。)
  5. [モデル コンテンツの選択] 画面で、[データベースから生成] を選択し、[次へ] をクリックします。
  6. [データ接続の選択] 画面で、AdventureWorksLT2008 データベースへの接続を指定します。
  7. 名前が AdventureWorksLT2008Entities であること、および [エンティティ接続設定の保存先App.Config] チェック ボックスがオンになっていることを確認し、[次へ] をクリックします。
  8. [データベース オブジェクトの選択] 画面で、[テーブル] ノードを展開し、Product テーブルと ProductCategory テーブルを選択します。
  9. [完了] をクリックします。

データを取得して表示するには:

  1. ファイルを開きMainWindow.xamlます。
  2. Window の Width プロパティを 450 に設定します。
  3. XAML エディターで、<Grid>とタグの間に次の DataGrid タグ</Grid>を追加して、 という名前の DataGrid を追加しますdataGrid1
  4. ウィンドウを選択します。
  5. [プロパティ] ウィンドウまたは XAML エディターを使用してWindow_Loaded、Loaded イベントの名前が付けられた Window のイベント ハンドラーを作成します。
  6. Window の分離コード ファイル (MainWindow.xaml.vbまたは) を開きます。MainWindow.xaml.cs
  7. 次のコードを追加して、結合されたテーブルから特定の値のみを取得しItemsSource、DataGrid のプロパティをクエリの結果に設定します。

    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 が表示されます。

実行すると、次のエラーが表示されます。

この行では、タイプ 'System.Data.Entity.DbSet' を 'System.Data.Objects.ObjectQuery' に暗黙的に変換できません: ObjectQuery products = dataEntities.Products;

私が試したものは何もありません - 何か提案はありますか?

4

2 に答える 2

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 };

注 :

ObjectQuery は、特定のオブジェクトのコンテキストで概念モデルに対して実行される一般的なクエリを表します。

dataEntities.Products は一連のデータを表します

于 2012-09-03T18:12:21.257 に答える