2014-04-09 186 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上)。