Vb.net 无法将LINQ查询分配给变量
我想声明一个变量来保存从LINQ到SQL的查询结果,如下所示: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 _
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语言的例子。马克在他编辑的例子中向你们展示了。但是这种方法的用途有限——您可以在本地使用这些结果,但不能将它们传递或返回给调用方。如果你只是在做一些局部计算,那么匿名类型,一个没有名字的类型就可以了。