将匿名类型作为强类型返回

时间:2014-04-09 00:48:49

标签: c#

我正在用C#类编写一个方法。 它使用Database 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();
    }

4 个答案:

答案 0 :(得分:4)

您正在创建一个匿名类型列表。您应该根据您的返回类型创建一个强类型列表List<getCourses>。将select new更改为select new getCourses。另外,为列表(L_courses)创建另一个变量是完全没必要的,如果您不打算在返回之前对列表执行任何操作,则可以直接返回列表。

答案 1 :(得分:4)

您必须告诉它使用哪个类,而不是创建匿名类型:

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

答案 2 :(得分:1)

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

是匿名类型(仅因为字段匹配getCourses并不意味着它是getCourses)。您可以将光标放在.ToList()上来验证使用intelisense返回的类型。您可能应该使用:

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

答案 3 :(得分: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上的范围)是值得商榷的。