【发布时间】:2023-04-05 21:10:01
【问题描述】:
我有如下字典。
static Dictionary<string, Room> allRooms = new Dictionary<string, Room>();
public class Room
{
public String RoomID { get; set; }
public String TeamID { get; set; }
public string RoomName { get; set; }
public string Status { get; set; }
public List<Member> ConnectedUsers { get; set; }
}
public class Member
{
public string ConnectionId { get; set; }
public string UserName { get; set; }
public string TeamId { get; set; }
public string MemberId { get; set; }
public string ConnectionStatus { get; set; }
public bool MuteChat { get; set; }
}
Member m = new Member { ConnectionId = "2", MemberId = "1", TeamId = "3", UserName = "username", ConnectionStatus = "available", MuteChat = false };
List<Member> connectedUsers = new List<Member>();
connectedUsers.Add(m);
allRooms.Add(RoomID, new Room { RoomID = "12", TeamID = "3", RoomName = "roomName", ConnectedUsers = connectedUsers });
在上面的字典中“房间”包含“成员”和“房间”信息。 成员包含成员的详细信息,例如“MemberID”和其他字段 所以,我知道特定人的“MemberID”。我正在使用以下代码获取所有房间中的所有成员。但我的要求是只获得 memberRooms。可以推荐一下吗
var connectionid1 = allRooms
.Select(i => i.Value).Cast<Room>()
.Where(d => d.ConnectedUsers.Count > 0)
.Select(d => d.ConnectedUsers).Cast<List<Member>>()
.SelectMany(d1 =>
d1
.Where(d => d.MemberId == userid )).ToList();
【问题讨论】:
-
对于上述示例数据,您希望看到的确切输出是什么?
-
我不明白你的问题。如果您只想要特定房间的成员,为什么不使用
myRoom.ConnectedUsers?无论如何摆脱所有那些Cast-calls,您的字典已经是正确的类型,无需再次将Value或ConnectedUsers转换为正确的类型。 -
尝试使用 First() 或 FirstOrDefault() 而不是 TolList()
-
@mjwills,嗨,在上面的代码中,我需要输出带有 RoomID 和成员数据的列表对象。但我的最后一个查询仅在成员列表对象中返回。那么如何检索 RoomID 和会员信息呢?
标签: c# asp.net linq dictionary