Vb.net 无法将LINQ查询分配给变量

Vb.net 无法将LINQ查询分配给变量,vb.net,linq,linq-to-sql,Vb.net,Linq,Linq To Sql,我想声明一个变量来保存从LINQ到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 _

我想声明一个变量来保存从LINQ到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.IQueryableOf”转换为“System.Linq.IQueryableOf Student”

如何声明变量查询以同时保存学生表和用户表中的数据

谢谢。

查询被声明为IQueryable,但当您查看第二个查询时,您实际上并没有返回学生-您返回的是由firstName、lastName和userName组成的编译器生成的类型。尝试将第二个查询更改为以以下内容结束:

Select st;
编辑:

如果您需要st以外的数据,那么您可以尝试一种技巧,为查询提供一个类型;我将使用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 };
}
查询被声明为IQueryable,但当您查看第二个查询时,实际上并没有返回学生-您返回的是由firstName、lastName和userName组成的编译器生成的类型。尝试将第二个查询更改为以以下内容结束:

Select st;
编辑:

如果您需要st以外的数据,那么您可以尝试一种技巧,为查询提供一个类型;我将使用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 };
}

我需要来自学生表和用户表的数据。如何声明查询变量?您应该创建一个名为my QueryResults的新类,该类具有所需的所有公共字段,并选择new QueryResults{fn=st.firstName,ln=st.lastName,un=user.userName}语法可能有点不对头,我是C-对两个查询都这样做。您可以在不定义QueryResult的情况下执行该操作,但这对于今天的课程来说太复杂了…@uosſſ给我看,但不要定义ʇnɹnɹnɹnɹnɹb只要我学到了什么,如果是pʇɽdɹoɔ就可以了。我也很喜欢C语言的例子。马克在他编辑的例子中向你们展示了。但是这种方法的用途有限——您可以在本地使用这些结果,但不能将它们传递或返回给调用方。如果你只是在做一些局部计算,那么匿名类型,一个没有名字的类型就可以了。我需要来自学生表和用户表的数据。如何声明查询变量?您应该创建一个名为my QueryResults的新类,该类具有所需的所有公共字段,并选择new QueryResults{fn=st.firstName,ln=st.lastName,un=user.userName}语法可能有点不对头,我是C-对两个查询都这样做。您可以在不定义QueryResult的情况下执行该操作,但这对于今天的课程来说太复杂了…@uosſſ给我看,但不要定义ʇnɹnɹnɹnɹnɹb只要我学到了什么,如果是pʇɽdɹoɔ就可以了。我也很喜欢C语言的例子。马克在他编辑的例子中向你们展示了。但是这种方法的用途有限——您可以在本地使用这些结果,但不能将它们传递或返回给调用方。如果你只是在做一些局部计算,那么匿名类型,一个没有名字的类型就可以了。