簡體   English   中英

返回匿名類型作為強類型

[英]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 newselect 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM