C#中的数据类型转换错误

时间:2016-06-23 22:26:04

标签: c# xaml type-conversion ado.net-entity-data-model

我希望使用C#显示存储在数据网格中的SQL Server数据库中的数据。我尝试关注this examples on msdn,但遇到了类型转换错误。我正在使用Visual Studio 2013。

我连接到SQL服务器,并创建了一个名为myEntity的ado.net数据模型。该模型包含几个表,其中一个是剧院,我试图在屏幕上显示。

以下是我所拥有的: 在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>'

我该如何解决这个问题?感谢。

1 个答案:

答案 0 :(得分: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
                             ...
                        };