将匿名类型作为强类型返回
本文关键字:强类型 返回 类型 | 更新日期: 2023-09-27 17:57:40
我正在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();
}
您正在创建一个匿名类型列表。您应该根据您的返回类型创建一个强类型列表List<getCourses>
。将select new
更改为select new getCourses
。此外,为列表(L_courses
)创建另一个变量是完全不必要的,如果您不打算在返回之前对列表进行任何操作,则可以直接返回列表。
你必须告诉它要使用哪个类,而不是创建一个匿名类型:
public List<getCourses> GetCourses()
{
return (from Cr in _er.Courses
select new getCourses
{
Courseid = Cr.CourseID,
CourseName = Cr.CourseName,
}).ToList();
}
井
new {
Courseid = Cr.CourseID,
CourseName = Cr.CourseName, }
是匿名类型(字段与getCourses
匹配并不意味着它是getCourses
)。您可以通过将光标放在.ToList()
上来验证使用intelisense返回的类型。您可能应该使用:
new getCources() {
Courseid = Cr.CourseID,
CourseName = Cr.CourseName, }
两个答案。
首先(依靠其他答案)你可以写:
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上的范围)。