我有 2 个表:用户和用户朋友
用户用户 ID、Guid
UserFriends ActiveID, Guid - PassiveID, Guid
所以你可以在我的好友列表中,但我不需要在你的好友列表中。对于所有用户的在线列表,首先我获取所有用户并使用 foreach 迭代他们来做我必须在这里做的事情。
List<DAL.User> onlineList = DAL.UserDAL.GetAllOnlineUser();
foreach (DAL.User onlineUser in onlineList)
{
//do things here
if (DAL.UserDAL.CheckForFriends(myUserID, onlineUser.UserID))
{
//Do things here
}
}
服务器代码:
public static List<User> GetAllOnlineUser()
{
using (RPGDataContext dc = new RPGDataContext())
{
return (from a in dc.Users where a.RefreshPing > DateTime.Now.AddMinutes(-30) orderby a.Username select a).ToList();
}
}
public static bool CheckForFriends(Guid userActive, Guid userPassive)
{
using (RPGDataContext dc = new RPGDataContext())
{
UserFriend uf = (from a in dc.UserFriends where a.UserIDActive == userActive && a.UserIDPassive == userPassive select a).SingleOrDefault();
return (uf != null);
}
}
在这个 foreach 中,我必须检查朋友,如果,我会在在线列表中加入一个朋友符号。这意味着有 20 个在线用户没有我,我必须访问数据库 20 次并返回。如何避免这种情况?