2016-06-23 4 views
0

Я хотел бы отображать данные, которые хранятся в базе данных SQL-сервера в сетке данных с использованием C#. Я пытался следовать this examples on msdn, но столкнулся с ошибкой преобразования типа. Я использую Visual studio 2013.Ошибка преобразования типа данных в C#

Я подключен к SQL-серверу и создал модель данных ado.net с именем myEntity. Модель содержит несколько таблиц, один из которых - «Театр» - это то, что я пытаюсь отобразить на экране.

Вот что у меня есть: О файле MainWindow.xaml У меня есть

<Page x:Class="XYZ.MainPage" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="theater List" Height="350" Width="525" 
     Loaded="Data_Loaded"> 
    <Grid> 
     <DataGrid Name="dataGrid1"></DataGrid> 
    </Grid> 
</Page> 

На MainWindow.xaml.cs в файл у меня есть:

using System.Data.Entity.Core.Objects; 
using System.Windows; 
using System.Windows.Controls; 
using System.Linq; 

namespace XYZ 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public sealed partial class MainPage : Page 
    { 
     myEntities dataEntites = new myEntities(); 

     public MainPage() 
     { 
      InitializeComponent(); 
     } 

     private void Data_Loaded(object sender, RoutedEventArgs e) 
     { 
       ObjectQuery<Theater> theaters = dataEntites.Theaters; 

       var query = from theater in theaters 
          where theater.type == "Big" 
          orderby theater.id 
          select new 
          { 
           theater.State, 
           theater.City, 
           theater.Type, 
           theater.Id, 
           theater.Name, 
           theater.Capacity 
           ... 
          }; 

       dataGrid1.ItemsSource = query.ToList(); 
     } 
    } 
} 

я столкнулся сообщение об ошибке на линия

ObjectQuery<Theater> theaters = dataEntites.Theaters; 

который гласит:

Не может неявно преобразовать тип 'System.Data.Entity.DbSet<XYZ.Theater>' в 'System.Data.Entity.Core.Objects.ObjectQuery<XYZ.Theater>'

Как я могу это исправить? Благодарю.

+0

Ну есть какая-либо причина вы думаете, вам нужны '' ObjectQuery ? Я бы просто объявил переменную как тип 'IQueryable ' ... –

+0

Возможный дубликат http://stackoverflow.com/a/11262713/5922757 – Jezor

+0

Ничего особенного, только попытайтесь следовать примерам. Я дам IQueryable попытку. – Hank

ответ

1

Проблема здесь состоит в том, что System.Data.Entity.Core.Objects.ObjectQuery<T> не наследует от System.Data.Entity.DbSet<T> и, следовательно, объект одного класса не могут быть преобразованы в другой неявно (ожидают, что implicit type conversion operator будет отменено, который не так).

Таким образом, вы просто должны изменить тип переменных театров из ObjectQuery<Theater> в DbSet<Theater>:

   DbSet<Theater> theaters = dataEntites.Theaters; 

       var query = from theater in theaters 
         where theater.type == "Big" 
         orderby theater.id 
         select new 
         { 
          theater.State, 
          theater.City, 
          theater.Type, 
          theater.Id, 
          theater.Name, 
          theater.Capacity 
          ... 
         }; 
+0

Это сработало, спасибо. Для зрителей BbSet использует пространство имен System.Data.Entity. – Hank

Смежные вопросы