2014-02-27 42 views
1

我有这样一个类:映射选择查询到一个对象中出错在LINQ

public class studentpres 
{ 
    public string stuname { set; get; } 
    public string stlastaname { set; get; } 
    public string stunumber { set; get; } 
    public string stumajor { set; get; } 
    public string stufiled { set; get; } 
    public string stuaverage { set; get; } 
    public string stumobile { set; get; } 
    public string stuemail { set; get; } 
    public string stuprofSupervisor { set; get; } 
    public string prifsuperEmail { set; get; } 
} 

我做出这样的查询:

public studentpres Get_Student_List(string stuNumber) 
{ 
    studentpres temp = 
     from i in dbconnect.tblUsers 
     join d in dbconnect.tblNovitiates 
      on i.tblStudent.studentNumber equals d.studentNumber 
     select new PresentClass.studentpres() 
     { 
      prifsuperEmail = d.profSupervisorUSername, 
      stlastaname = i.family, 
      stuaverage = i.tblStudent.average, 
      stuemail = i.email, 
      stufiled = i.tblStudent.field, 
      stumajor = i.tblStudent.major, 
      stumobile = i.mobile, 
      stuname = i.name, 
      stunumber = i.tblStudent.studentNumber, 
      stuprofSupervisor = Return_Name_By_userName(d.profSupervisorUSername) 
     }; 
} 

但我得到这个错误:

无法隐式转换类型
'System.Linq.IQueryable<Novitiate.AdminPortal.PresentationClass.PresentClass.studentpres>''Novitiate.AdminPortal.PresentationClass.PresentClass.studentpres'。 的显式转换存在(是否缺少强制转换?)

我还添加了Tolist()到查询的结束,但它没有再工作; 感谢

+0

尝试使用'var temp'而不是使用studentpres类型。 – Nilesh

回答

1

您的查询返回IQueryable<studentpres>结果,但您试图将其分配给studentpres类型的变量。如果你期待许多成果,然后改变你的方法的返回类型(从我假设你需要做的这个方法名)IQueryable<studentpres>IEnumerable<studentpres>

public IQueryable<studentpres> Get_Student_List(string stuNumber) 
{ 
    return from i in dbconnect.tblUsers 
      join d in dbconnect.tblNovitiates 
        on i.tblStudent.studentNumber equals d.studentNumber 
      select new PresentClass.studentpres() 
      { 
       prifsuperEmail = d.profSupervisorUSername, 
       stlastaname = i.family, 
        // ... 
      }; 
} 

注 - IQueryable<studentpress>将返回,而不是执行查询结果查询。如果你想获得查询结果,那么你应该执行它(即查询结果保存到列表):

public IList<studentpres> Get_Student_List(string stuNumber) 
{ 
    var query = from i in dbconnect.tblUsers 
       join d in dbconnect.tblNovitiates 
        on i.tblStudent.studentNumber equals d.studentNumber 
       select new PresentClass.studentpres() 
       { 
        prifsuperEmail = d.profSupervisorUSername, 
        stlastaname = i.family, 
        stuaverage = i.tblStudent.average, 
        stuemail = i.email, 
        stufiled = i.tblStudent.field, 
        stumajor = i.tblStudent.major, 
        stumobile = i.mobile, 
        stuname = i.name, 
        stunumber = i.tblStudent.studentNumber, 
        stuprofSupervisor = 
         Return_Name_By_userName(d.profSupervisorUSername) 
       }; 

     return query.ToList(); // executes query 
} 

如果你想要得到一个结果,然后调用查询FistOrDefault()SingleOrDefault()

public studentpres Get_Student_List(string stuNumber) 
{ 
    var query = from i in dbconnect.tblUsers 
       join d in dbconnect.tblNovitiates 
        on i.tblStudent.studentNumber equals d.studentNumber 
       select new PresentClass.studentpres() 
       { 
        prifsuperEmail = d.profSupervisorUSername, 
        stlastaname = i.family, 
        // ... 
       }; 

    return query.FirstOrDefault(); 
} 
+1

谢谢。我发现我的错误基本上由你的解释 – SSC

3

你的查询返回IQueryable<studentpres>,你应该选择只有一条记录,使用:SingleFirst或其他方法:

  1. 的SingleOrDefault
  2. 首先
  3. FirstOrDefault
+0

谢谢你的工作 – SSC