2017-12-27 913 views
0

我不明白为什么我从linq查询返回总是不正确的。Linq查询返回错误

[HttpGet] 
    public List<Programs> GetPrograms() 
    { 
     using (var context = new ProgramsDataContext1()) 
     { 

      var qry = (from a in context.Programs 

         join b in context.courselist on a.Prog_id equals(b.prog_id) 
         where a.Prog_id ==b.prog_id 
         orderby a.Programname 
         select new 
         { Prog_id =a.Prog_id,Programname=a.Programname, programlevel=a.programlevel, planname=a.planname, catalogNo=b.catalogNO, coursetitle=b.coursetitle, subject=b.subject 
         } 
        ).ToList(); 


      return qry ; 
     } 

    } 

它总是在qry上有一个红色下划线。这里有什么问题?谢谢。

+0

如何定义类程序? select不会创建程序的实例,但会创建匿名对象实例,最终的ToList无法匹配您的返回'List ' – Steve

+0

程序是一个表类。 – user788448

回答

1

由于您已经在进行连接,因此不需要where子句。你的返回类型也不一样,这就是你得到的错误。您现在正在返回一个anonymous对象的列表,而不是Programs

+0

我试图从程序和courselist表中返回列。如何返回正确的类型?提前致谢。 – user788448

+0

@ user788448,你需要创建一个新的poco/dto来返回你需要的所有数据,然后发送一个'List '回来。在你的查询中,你在'select'中创建'new dto {}' –

0

只需定义一个只列出您需要的两个类的属性的类,而不是创建一个匿名对象来创建此类的实例。

public class ProgramsCourseDto 
{ 
    public int Prog_id {get;set;} 
    public string Programname {get;set;} 
    public int programlevel {get;set;} 
    public string planname {get;set;} 
    public int catalogNo {get;set;} 
    public string coursetitle {get;set;} 
    public string subject {get;set;} 
} 

[HttpGet] 
public List<ProgramsCourseDto> GetProgramsCourses() 
{ 
    using (var context = new ProgramsDataContext1()) 
    { 

     var qry = (from a in context.Programs 
        join b in context.courselist on a.Prog_id equals(b.prog_id) 
        orderby a.Programname 
        select new ProgramsCourseDto 
        { 
         Prog_id =a.Prog_id, 
         Programname=a.Programname, 
         programlevel=a.programlevel, 
         planname=a.planname, 
         catalogNo=b.catalogNO, 
         coursetitle=b.coursetitle, 
         subject=b.subject 
        }).ToList(); 
     return qry ; 
    } 
} 
+0

非常感谢!创建一个新的ProgramsCourseDto类来解决我的程序。 – user788448