2014-01-21 37 views
4

編譯得很好,但執行失敗,並且標題中出現錯誤。不允許在查詢中顯式構造實體類型「藝術家」

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的end {).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,我想返回到一個下拉列表。

+0

錯誤似乎很清楚。你不能創建一個新的'Artist'作爲linq查詢的一部分。你不能只選擇藝術家嗎? –

+0

爲什麼另一個例子工作呢? – user3127986

+0

'db.Artists'的類型是什麼? –

回答

10

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(); 
+0

我正在嘗試使用返回db.Artists.ToList()的解決方案。要填充page_Load上的下拉列表,我做了這個。 DropDownList1.DataSource = ArtistDetail(); DropDownList1.DataBind();它產生了一個錯誤,因爲我在.aspx頁面中使用DataTextField =「Artist_name」DataSourceID =「Id」 – user3127986

+0

@ user3127986它給你什麼錯誤? –

+0

DropDownList1.DataSource = ArtistDetail(); DropDownList1.DataBind(); <===錯誤DataSource和DataSourceID都是在'DropDownList1'上定義的。刪除一個定義。我評論了第一個。然後我得到這個錯誤'DropDownList1'的DataSourceID必須是IDataSource類型的控件的ID。無法找到ID爲'Id'的控件。 – user3127986

相關問題