Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
C# 将三个数据库集合并为一个新的数据库集_C#_Asp.net_Linq_Model View Controller_Asp.net Web Api - Fatal编程技术网

C# 将三个数据库集合并为一个新的数据库集

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

我尝试获取3个DbSet,并取出其中的一些值,然后返回一个新的DbSet。我可以在一个房间里找到一个房间,但在找一组房间时遇到了麻烦

这里有一间单人房,很好用

这是我的存储库呼叫

    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()
});