LINQ的查询使用带有房间信息的fetch Dictionary对象

时间:2017-08-31 10:28:29

标签: c# asp.net linq dictionary

我有下面的词典。

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

在上面的词典&#34; Room&#34;包含&#34;会员&#34;和&#34;房间&#34;信息。 会员包含会员的详细信息,例如&#34;会员ID&#34;和其他领域 所以,我知道&#34;会员ID&#34;对于特定的人。我正在使用以下代码获取然后获取所有房间的所有成员。但我的要求是只获得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(); 

1 个答案:

答案 0 :(得分:0)

修改您的会员类并添加Room的引用。

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; }
    public Room Room { get; set; }
    public string RoomID { get; set; }
}

要获取房间的所有成员,请使用以下代码:

var MemberList = DB.Members.Where(x => x.RoomID == "RoomID here").ToList();