[英]Return an anonymous type as a strongly typed
我在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();
}
您正在創建一個匿名類型的列表。您List<getCourses>
根據返回類型創建一個強類型的列表,即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的范圍)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.