我有两张桌子:
聊天室
ChatUser (我将用户插入聊天室,每位用户1行)
我想把我喜欢的房间整理出去。
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;
}
答案 0 :(得分:0)
您可以与两组房间相交,这可以提供比您要求的更多信息:
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记录进行分组,然后找到包含userIds的房间。如果您拥有N个不同的用户并且正在寻找一个公共休息室,那么这种方法可能会更好。
答案 1 :(得分:0)
您可以使用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();
我不完全确定这是否是您正在寻找的。也许它可以引导您了解如何重构代码,并使其看起来更整洁。