C# 将三个数据库集合并为一个新的数据库集
我尝试获取3个DbSet,并取出其中的一些值,然后返回一个新的DbSet。我可以在一个房间里找到一个房间,但在找一组房间时遇到了麻烦 这里有一间单人房,很好用 这是我的存储库呼叫C# 将三个数据库集合并为一个新的数据库集,c#,asp.net,linq,model-view-controller,asp.net-web-api,C#,Asp.net,Linq,Model View Controller,Asp.net Web Api,我尝试获取3个DbSet,并取出其中的一些值,然后返回一个新的DbSet。我可以在一个房间里找到一个房间,但在找一组房间时遇到了麻烦 这里有一间单人房,很好用 这是我的存储库呼叫 public Room GetRoom(Guid id) { var room = _db1Context.ClientRoom.FirstOrDefault(x =>x.Id == id); var roomDetails = _db2Context.RoomDe
public Room GetRoom(Guid id)
{
var room = _db1Context.ClientRoom.FirstOrDefault(x =>x.Id == id);
var roomDetails = _db2Context.RoomDetail.FirstOrDefault(x => x.ClientRoomId== id);
var summary = _db3Context.RoomSummary.FirstOrDefault(x => x.ClientRoomId == id);
var room = _roomFactory.BuildRoomEntity(room, roomDetails, summary);
return room;
}
这是我的工厂电话
public Room BuildRoomEntity(ClientRoom room, RoomDetail roomDetail, RoomSummary summary)
{
var room = new Room()
{
Id = room.ClientRoomId,
Name = room.DisplayName,
Description = roomDetail.Description,
Status = summary.Status,
OnlineStatus = summary.OnlineStatus,
ServicePlan = roomdetail.ServicePlan
Incidents = room.Incident == null ? new List<Incident>() : room.Incident.ToList(),
Devices = roomDetail.Devices == null ? new List<Device>() : roomDetail.Devices.ToList()
};
return room;
}
public Room BuildRoomEntity(ClientRoom、RoomDetail RoomDetail、RoomSummary summary)
{
var房间=新房间()
{
Id=room.ClientRoomId,
Name=room.DisplayName,
Description=roomDetail.Description,
状态=摘要。状态,
OnlineStatus=摘要。OnlineStatus,
ServicePlan=roomdetail.ServicePlan
事件=room.Incident==null?新列表():room.Incident.ToList(),
Devices=roomDetail.Devices==null?新列表():roomDetail.Devices.ToList()
};
返回室;
}
我想做一些类似的事情,除了得到一份房间清单
这是我的回购电话的样子
public List<Room> GetRooms()
{
var room = _db1Context.room;
var roomDetails = _db2Context.RoomDetails;
var roomSummary = _db3Context.RoomSummaries;
var room = _roomFactory.BuildRoomEntity(room, roomDetails, summary);
return room;
}
公共列表GetRooms()
{
var room=_db1Context.room;
var roomDetails=\u db2Context.roomDetails;
var roomSummary=_db3Context.RoomSummaries;
var room=\u roomFactory.BuildRoomEntity(房间、房间详细信息、摘要);
返回室;
}
这就是我遇到的问题,我想使用Linq根据从其他数据库集传入的值创建一个房间列表
public List<Room> BuildRoomEntity(DbSet<ClientRoom> room, DbSet<RoomDetail> roomDetail, DbSet<RoomSummary> summary)
{
var rooms = new List<Room>()
{
}
return rooms;
}
公共列表BuildRoomEntity(数据库集房间、数据库集房间详细信息、数据库集摘要)
{
var房间=新列表()
{
}
返回室;
}
如果您的类的配置如下所示,请多谢:
public class ClientRoom
{
public int Id { get; set; }
public string DisplayName { get; set; }
public RoomDetail RoomDetail { get; set; }
public RoomSummary RoomSummary { get; set; }
}
然后,您可以并且应该使用DbSet.Include
var room = _db1Context.room
room.Include(r=>r.RoomDetail);
room.Include(r=>r.RoomSummary);
如果子表中只有ID,则可以使用联接:
var room = _db1Context.room;
var roomDetails = _db2Context.RoomDetails;
var roomSummary = _db3Context.RoomSummaries;
var subtables = roomDetails.Join(roomSummary, rd=>ClientRoomId, rs=>rs.ClientRoomId, (roomDetails, summary)=>new {roomDetails.ClientRoomId, roomDetails, roomSummary});
var rooms = room.Join(subtables, r=>r.Id, sub=>sub.ClientRoomId, (room, sub)=>
new Room()
{
Id = room.Id,
Name = room.DisplayName,
Description = sub.roomDetail.Description,
Status = sub.summary.Status,
OnlineStatus = sub.summary.OnlineStatus,
ServicePlan = sub.roomdetail.ServicePlan
Incidents = room.Incident == null ? new List<Incident>() : room.Incident.ToList(),
Devices = sub.roomDetail.Devices == null ? new List<Device>() : roomDetail.Devices.ToList()
});
var-room=\u db1Context.room;
var roomDetails=\u db2Context.roomDetails;
var roomSummary=_db3Context.RoomSummaries;
var subtables=roomDetails.Join(roomSummary,rd=>ClientRoomId,rs=>rs.ClientRoomId,(roomDetails,summary)=>new{roomDetails.ClientRoomId,roomDetails,roomSummary});
var rooms=room.Join(子表,r=>r.Id,sub=>sub.ClientRoomId,(room,sub)=>
新房间()
{
Id=房间,Id,
Name=room.DisplayName,
Description=sub.roomDetail.Description,
状态=子摘要状态,
OnlineStatus=sub.summary.OnlineStatus,
ServicePlan=sub.roomdetail.ServicePlan
事件=room.Incident==null?新列表():room.Incident.ToList(),
Devices=sub.roomDetail.Devices==null?新列表():roomDetail.Devices.ToList()
});