编译正常,但执行失败,出现标题错误。
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
}
}
}
代码隐藏
private List<ArtistServiceReference.Artist> ArtistDetail()
{
ArtistServiceReference.ArtistServiceClient client = new
ArtistServiceReference.ArtistServiceClient();
ArtistServiceReference.Artist[] artists = client.ArtistDetail();
return artists.ToList();
我想将艺术家列表移动到下拉列表。
错误发生在 ArtistService.cs 的末尾 {).ToList(); 关于如何解决此问题的任何解释?谢谢
我的代码基于此示例,并且此示例运行良好。
示例代码MyService.cs
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 ,而我想返回一个下拉列表。
最佳答案
Linq to Entities 无法将 Artist 对象创建转换为 SQL 代码(真的,这应该是什么样子?)。 Linq to Entities 只能执行 SQL 查询并将返回的字段映射到它知道如何映射到的某个实体(即您的 DbSet 实体)。因此,您需要先执行查询,然后在本地创建艺术家实体:
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();
}
}
}
顺便说一句,您的 Artists
DbSet 中似乎有 Artist
实体。为什么不直接返回
return db.Artists.ToList();
关于c# - 不允许在查询中显式构造实体类型 'Artist',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21265598/