【发布时间】:2013-09-23 13:33:30
【问题描述】:
我有 2 个表:User 和 UserFriends
用户 用户 ID,Guid
用户朋友 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 次并返回。 如何避免?
【问题讨论】:
-
你不能获取
GetAllOnlineUser()方法上加载的所有信息吗?