使用用户的LINQ房间ID



我有两个表:

聊天室

  • id(int(

chatuser (在其中我将用户插入聊天室,每个用户1行(

  • roomid(int(//来自表聊天室的ID
  • 用户ID(int(

我想循环出来我喜欢的所有房间。

ChatUserDTO chatUser = db.ChatUser.Where(x => x.UserId == userId);

但是如何获取具有可变userId2的第二个用户的房间ID?如果没有两个用户存在的房间,则应返回roomid = 0。

让它使用此代码,但必须有更好的方法来完成。

var chatExists = (from cu in db.ChatUser
                 where cu.UserId == userId    
                 select new { cu.RoomId })
                 .ToList();
var chatRoomId = 0;
foreach (var item in chatExists)
{
    ChatUserDTO checkRoom = 
            db.ChatUser.FirstOrDefault(
                x => x.UserId == userId2 && x.RoomId == item.RoomId);
    if (checkRoom != null)
        chatRoomId = checkRoom.RoomId;
}

您可以与两组房间相交,这为您提供了比您要求的更多信息:

var rooms1 = db.ChatUser.Where(cu => cu.UserId == userId).Select(cu => cu.RoomId);
var rooms2 = db.ChatUser.Where(cu => cu.UserId == userId2).Select(cu => cu.RoomId);
var roomsWithBoth = rooms1.Intersect(rooms2);

另一种选择是使用GroupBy按房间对Chatuser记录进行分组,然后找到包含两个用户ID的房间。如果您有不同的用户并且正在寻找公共房间,则这种方法可能会更好。

您可以使用 Ling to SQL JOIN,然后使用lambda表达式来整理您从该 query的内容。

看起来像这样:

var rooms = (from cu in db.ChatUser
            join cr in db.ChatUser on cu.Id equals cr.UserId
            select cu).ToList();
//Now Sort 
var rooms = rooms.Where(x => x.UserId.equals(userId) && x.UserId !=null ).Select(x => RoomId).FirstorDefault();

我不完全确定您是否正在寻找。也许它可以引导您弄清楚如何重构代码,并使其看起来更整洁。

最新更新