2014-04-09 213 views
1

我正在C#類中編寫方法。 它使用數據庫Linq查詢。 我希望它的方法返回結果。我正在使用下面的代碼,但它導致錯誤;以強類型返回匿名類型

class getCourses 
{ 
    public string Courseid { get; set; } 
    public string CourseName { get; set; } 
} 

public List<getCourses> GetCourses() 
    { 
     List<getCourses> L_courses = new List<getCourses>(); 
     L_courses = (from Cr in _er.Courses 
          select new 
          { 
           Courseid = Cr.CourseID, 
           CourseName = Cr.CourseName, 
          }).ToList(); 
    } 
+0

只需在'new'後添加'getCourses'' – Jonesopolis

+1

這不會編譯,您缺少'return L_courses;'。 –

回答

4

您正在創建匿名types.You名單應該創建一個強類型列表,根據您的返回類型是List<getCourses>。將select new更改爲select new getCourses。同樣爲列表(L_courses)創建另一個變量是完全沒有必要的,如果您不打算在返回之前對列表執行任何操作,則可以直接返回列表。

4

你必須告訴它使用哪個類,而不是創建一個匿名類型:

public List<getCourses> GetCourses() 
{ 
    return (from Cr in _er.Courses 
      select new getCourses 
        { 
         Courseid = Cr.CourseID, 
         CourseName = Cr.CourseName, 
        }).ToList(); 
} 
1

new { 
    Courseid = Cr.CourseID, 
    CourseName = Cr.CourseName, } 

是一個匿名類型(只是因爲領域相匹配getCourses並不意味着它是一個getCourses)。您可以通過將光標放在.ToList()上來驗證使用intelisense返回的類型。你可能應該使用:

new getCources() { 
    Courseid = Cr.CourseID, 
    CourseName = Cr.CourseName, } 
0

兩個答案。

首先(在其他答案捎帶),你可以這樣寫:

public List<getCourses> GetCourses() { 
    return _er.Courses.Select(c => 
     new getCourses { 
      Courseid = c.CourseID, 
      CourseName = c.CourseName 
     }).ToList(); 
} 

方式二......既然_er.Courses已經是你想要對付,爲什麼不喜歡這樣的對象。 ..假設_er.Courses是一個Course對象列表。然後,你可以這樣做:

public Course : ICourseOverview { 
    // properties 
} 

public interface ICourseOverview { 
    public int CourseId { get; } 
    public string CourseName { get; } 
} 

然後,你可以簡單地這樣做:

public IEnumerable<ICourseOverview> GetCourses() { 
    return (IEnumerable<ICourseOverview>)_er.Courses; 
} 

但是,如果你這樣做,那麼它是值得商榷的這個類的一點是什麼(取決於作用域該應用程序在_er和_er.Courses上)。