无法将LINQ查询分配给变量

时间:2010-10-28 05:03:22

标签: vb.net linq linq-to-sql

我想声明一个变量来保存查询结果从LINQ to SQL,如下所示:

    Dim query As IQueryable(Of Student)

    If isNoUserName Then

        query = From st In db.Students _
                Order By st.AssignedId Ascending _
                Where (st.studentId = studentId _
                Select st

    Else

        '' error here
        query = From st In db.Students _
                Order By st.firstName Ascending _
                Join user In db.MSUsers On user.UserId Equals st.UserId _
                Where st.studentId = studentId _
                Select st.firstName, st.lastName, user.userName

    End If

Return query
  

错误:从'System.Linq.IQueryable(Of)'到'System.Linq.IQueryable(Of Student)'的转换。

如何声明变量“query”来保存“Student”和“User”表中的数据?

谢谢。

1 个答案:

答案 0 :(得分:1)

query被声明为IQueryable<Student>,但是你看第二个查询,你实际上并没有返回学生 - 你正在返回由firstName组成的编译器生成的类型,lastNameuserName。尝试将第二个查询更改为以:

结束
Select st;

编辑:

重新需要st以外的数据,然后您可以尝试使用query类型的技巧;我将使用C#作为插图,因为我的VB是只读的:

var query = Enumerable.Repeat(new {firstName="",lastName="",userName=""}, 0);
...
if(isNoUserName) {
    query = ...
            select new {st.firstName, st.lastName, userName = ""};
} else {
    query = ...
            select new {st.firstName, st.lastName, user.userName };
}