【问题标题】:LINQ's Query using fetch Dictionary object with Room InformationLINQ 的查询使用带有房间信息的 fetch Dictionary 对象
【发布时间】: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,您的字典已经正确的类型,无需再次将ValueConnectedUsers转换为正确的类型。
  • 尝试使用 First() 或 FirstOrDefault() 而不是 TolList()
  • @mjwills,嗨,在上面的代码中,我需要输出带有 RoomID 和成员数据的列表对象。但我的最后一个查询仅在成员列表对象中返回。那么如何检索 RoomID 和会员信息呢?

标签: c# asp.net linq dictionary


【解决方案1】:

编辑您的成员类并添加 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();

【讨论】:

  • 我不知道是哪个房间。我知道字典中的 MemberID。如果我将 RoomID 放在 Member 对象中。这是工作。我知道这里的用户 ID,我像这样更新脚本var connectionid1 = allRooms .Select(i =&gt; i.Value).Cast&lt;Room&gt;() .Where(d =&gt; d.ConnectedUsers.Count &gt; 0) .Select(d =&gt; d.ConnectedUsers).Cast&lt;List&lt;Member&gt;&gt;() .SelectMany(d1 =&gt; d1 .Where(d =&gt; d.MemberId == userid )).ToList();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 2017-11-18
相关资源
最近更新 更多