C# 不允许在查询中显式构造实体类型“Artister”

C# 不允许在查询中显式构造实体类型“Artister”,c#,linq,entity-framework,C#,Linq,Entity Framework,编译很好,但执行失败,标题中有错误 ArtistService.cs public class ArtistService : IArtistService { public List<Artist> ArtistDetail() { using (ArtistDataContext db = new ArtistDataContext()) { return (from artist in db.Arti

编译很好,但执行失败,标题中有错误

ArtistService.cs

public class ArtistService : IArtistService
{
    public List<Artist>  ArtistDetail()  
    {
        using (ArtistDataContext db = new ArtistDataContext())
        {
            return (from artist in db.Artists

                select new Artist()
                {
                    Id = artist.Id,
                    Artist_name = Artist.Artist_name
                }).ToList();     <=== error happened here
        }
    }
}
public class MyService : IMyService
{
    public List<Task> GetTasks()
    {
        using (TasksDataContext db = new TasksDataContext())
        {
            return (from task in db.TasksLists
                select new Task()
                {
                    Id = task.taskId,
                    Name = task.taskName,

                }).ToList();
        }
    }
}
代码隐藏

private List<ArtistServiceReference.Artist> ArtistDetail()
{
    ArtistServiceReference.ArtistServiceClient client = new 
    ArtistServiceReference.ArtistServiceClient();

    ArtistServiceReference.Artist[] artists = client.ArtistDetail();

    return artists.ToList();
我想将艺术家列表移动到下拉列表

错误发生在{.ToList结尾的ArtistService.cs中; 有关于如何解决此问题的说明吗?谢谢

我的代码基于这个示例,这个示例运行良好

示例代码MyService.cs

public class ArtistService : IArtistService
{
    public List<Artist>  ArtistDetail()  
    {
        using (ArtistDataContext db = new ArtistDataContext())
        {
            return (from artist in db.Artists

                select new Artist()
                {
                    Id = artist.Id,
                    Artist_name = Artist.Artist_name
                }).ToList();     <=== error happened here
        }
    }
}
public class MyService : IMyService
{
    public List<Task> GetTasks()
    {
        using (TasksDataContext db = new TasksDataContext())
        {
            return (from task in db.TasksLists
                select new Task()
                {
                    Id = task.taskId,
                    Name = task.taskName,

                }).ToList();
        }
    }
}
示例default.aspx.cs

private List<TaskService.Task> GetTasks()
{
    TaskService.MyServiceClient client = new TaskService.MyServiceClient();

    TaskService.Task[] tasks = client.GetTasks();

    return tasks.ToList();
}

我不明白为什么这个例子会起作用,而不是我的。唯一的区别是这个例子返回到gridview,我想返回到dropdownlist。

Linq to Entities无法将艺术家对象创建转换为SQL代码,这应该是什么样子?。Linq to Entities只能执行SQL查询和映射将字段返回到它知道如何映射到的某个实体,即您的数据库集实体。因此,您需要先执行查询,然后在本地创建艺术家实体:

public class ArtistService : IArtistService
{
    public List<Artist>  ArtistDetail()  
    {
        using (ArtistDataContext db = new ArtistDataContext())
        {
            return (from artist in db.Artists
                    select new { // select only columns you need
                       artist.Id,
                       artist.Artist_name
                    })
                    .AsEnumerable() // execute query
                    .Select(x => new Artist { // create instance of class
                        Id = x.Id,
                        Artist_name = x.Artist_name
                    })
                    .ToList();
        }
    }
}

错误似乎很明显。您不能在linq查询中创建新的艺术家。您不能只选择艺术家吗?为什么另一个示例可以工作?db.Artists的类型是什么?public System.Data.linq.Table Artists如果已经是艺术家,为什么要尝试从他们中创建新的艺术家?或者这些不同的类在不同的命名空间中es?我正在使用返回db.Artists.ToList尝试您的解决方案。要在页面上填充dropdownlist,我执行了以下操作。dropdownlist 1.DataSource=ArtistDetail;dropdownlist 1.DataBind;它生成了一个错误,因为我在.aspx页面DataTextField=Artist\u name DataSourceID=IDDropDownList 1.DataSource=ArtistDetail;DropDow中使用了nList1.DataBind;@user3127986转到页面标记,找到这个DropDownList控件并从itI中删除DataSourceID我在@user3127986欢迎:下次仔细阅读异常消息时,它通常包含您需要知道的所有信息