2013-11-14 44 views
4

我正要建立一個DTO的數據列表。不能隱式轉換類型LINQ

return from p in db.Students.Find(Id).Courses 
     select new CourseDTO 
     { 
      Id = p.Id, 
      CourseName = p.CourseName 
     }; 

然而,當我用這個,我得到以下錯誤:

Cannot implicitly convert type 
'System.Collections.Generic.IEnumerable<Storage.Models.CourseDTO>' to 
'System.Collections.Generic.ICollection<Storage.Models.CourseDTO>'. 
An explicit conversion exists (are you missing a cast?) 

任何人都可以解釋,爲什麼?

+2

顯示函數簽名.. –

回答

4

你方法的返回類型爲ICollection<T>但查詢返回IEnumerable<T>(或IQueryable<T>)。無論如何,你很可能不需要ICollection<T>,如果你這樣做了,你會期待那個系列做什麼?它不能用於操縱數據庫。如果你正在做的是查詢數據庫,那麼你的方法的返回類型更改爲IEnumerable<T>

public IEnumerable<CourseDTO> MyMethod(int Id) 
{ 
    return from p in db.Students.Find(Id).Courses 
      select new CourseDTO 
      { 
       Id = p.Id, 
       CourseName = p.CourseName 

      }; 
} 
+0

如果您不必返回'List',則此解決方案是首選,因爲它消耗的內存更少。 –

+0

+1不提供最簡單的解決方案,並用'.ToList()'與你的眼睛關閉.. –

+0

感謝作品像一個魅力 – tamikoon

5
return (from p in db.Students.Find(Id).Courses 
      select new CourseDTO 
      { 
       Id = p.Id, 
       CourseName = p.CourseName 

      }).ToList(); 
+1

這是不優選的......我會改變函數簽名去到'IEnumerable',除非我必須得到'List' –

+0

這實際上是首選,當你想確保結果是物化的,儘管OP沒有說明。 –