Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 具有返回函数的Linq实体_Vb.net_Linq - Fatal编程技术网

Vb.net 具有返回函数的Linq实体

Vb.net 具有返回函数的Linq实体,vb.net,linq,Vb.net,Linq,我有两张桌子: 房间类型(标识房间类型,名称房间类型) Room\u Room(ID\u Room\u Type,房间号) 如何在RoomType表中放置一个新列Temp,该列的值将作为Room\u Room表中的房间总数 此代码不起作用: Private Sub SimpleButton1_Click(sender As Object, e As EventArgs) Handles SimpleButton1.Click Dim Db As New HotelEntities

我有两张桌子:

  • 房间类型
    标识房间类型,名称房间类型)

  • Room\u Room
    ID\u Room\u Type,房间号)

如何在
RoomType
表中放置一个新列
Temp
,该列的值将作为
Room\u Room
表中的房间总数

此代码不起作用:

Private Sub SimpleButton1_Click(sender As Object, e As EventArgs) Handles SimpleButton1.Click

    Dim Db As New HotelEntities

    Dim s = (From I In Db.Room_Type Select I.ID_Room_Type, I.Name_Room_Type, ColumnTemp = GetTotal_Room(I.ID_Room_Type)).ToList()

    Me.DataGridView1.DataSource = s

End Sub

Private Function GetTotal_Room(id_room_type As Int32) As Int32

    Dim Db As New HotelEntities

    Return (From I In Db.Room_Room Where I.ID_Room_Type = id_room_type).Count

End Function
消息错误:LINQ to实体无法识别方法“Int32” GetTotal_Room(Int32)方法,并且无法转换此方法 转换为存储表达式


我有一个类似的问题,我通过先提取列表,然后对其应用linq来解决它。您可以按以下方式修改代码

Dim Db As New HotelEntities
Dim roomTypeList = Db.Room_Type.ToList()
Dim s = (From I In roomTypeList
         Select I.ID_Room_Type, I.Name_Room_Type,
         ColumnTemp = GetTotal_Room(I.ID_Room_Type)).ToList()

Me.DataGridView1.DataSource = s

我有一个类似的问题,我通过先提取列表,然后对其应用linq来解决它。您可以按以下方式修改代码

Dim Db As New HotelEntities
Dim roomTypeList = Db.Room_Type.ToList()
Dim s = (From I In roomTypeList
         Select I.ID_Room_Type, I.Name_Room_Type,
         ColumnTemp = GetTotal_Room(I.ID_Room_Type)).ToList()

Me.DataGridView1.DataSource = s

实体框架将为有效的sql查询生成Linq查询表达式。
错误消息explain EF不知道如何将方法
GetTotal\u Room
转换为有效的sql查询

相反,您可以从一个查询中获得所需的结果,而无需额外的函数

From roomRoom In db.Room_Room
Join roomType In db.Room_Type On roomRoom.ID_Room_Type Equals roomType.ID_Room_Type
Select New With { roomRoom.ID_Room_Type, roomType.Name_Room_Type } Into roomtypes
Group roomtypes By roomtypes Into grouptypes
Select New With
{
   Id = grouptypes.Key.ID_Room_Type,
   Name = grouptypes.Key.Name_Room_Type,
   Total = grouptypes.Count()
}
另外,我不知道应用程序的上下文,但根据给定的示例,我认为可以删除表名和列名中的一些前缀和后缀

RoomType
    Id
    Name

Room
    TypeId -- reference to RoomType.Id

实体框架将为有效的sql查询生成Linq查询表达式。
错误消息explain EF不知道如何将方法
GetTotal\u Room
转换为有效的sql查询

相反,您可以从一个查询中获得所需的结果,而无需额外的函数

From roomRoom In db.Room_Room
Join roomType In db.Room_Type On roomRoom.ID_Room_Type Equals roomType.ID_Room_Type
Select New With { roomRoom.ID_Room_Type, roomType.Name_Room_Type } Into roomtypes
Group roomtypes By roomtypes Into grouptypes
Select New With
{
   Id = grouptypes.Key.ID_Room_Type,
   Name = grouptypes.Key.Name_Room_Type,
   Total = grouptypes.Count()
}
另外,我不知道应用程序的上下文,但根据给定的示例,我认为可以删除表名和列名中的一些前缀和后缀

RoomType
    Id
    Name

Room
    TypeId -- reference to RoomType.Id

你是说你想在不向数据库表添加相应列的情况下向EF实体添加属性吗?是的,它的任务就是查询。我担心你使用
GetTotal\u Room
函数的查询甚至无法编译。引入将基于查询结果创建的新类型,并将其用于
DataGridView
您是说要向EF实体添加属性,而不向数据库表添加相应的列吗?是的,它的任务只是查询,我担心使用
GetTotal\u Room
函数的查询甚至无法编译。介绍您将根据查询结果创建的新类型,并将其用于
DataGridView
感谢您的回答。很抱歉,从我看到的错误代码来看,Fabio只是错误地键入了
,而不是
}
。说“错误代码”并不能帮助他帮助你。从我看到的错误代码来看,法比奥只是错误地键入了,而不是}。说“错误代码”无助于他帮助你