ASP.NET中用Entity Framework关联SQL Server两表查询指定用户好友信息
没问题,我来帮你搞定这个EF查询需求!结合你的表结构,我分两种场景给你写实用的代码:
核心表结构回顾
先明确我们要用到的表字段(按你描述的):
member表:ID(主键)、UserName(好友名称字段)friend表:UserID(当前用户ID)、FriendID(好友的ID),两个字段均关联member.ID
1. 未配置EF导航属性时(手动关联查询)
如果你的EF模型还没设置导航属性,直接用LINQ的关联语法就能拿到指定用户的好友ID和名称:
LINQ查询语法写法
int targetUserId = 1; // 替换成你要查询的目标用户ID var friends = from f in dbContext.Friend join m in dbContext.Member on f.FriendID equals m.ID where f.UserID == targetUserId select new { FriendID = m.ID, FriendName = m.UserName }; // 执行查询并获取结果列表 var friendList = friends.ToList();
Lambda方法链写法
如果你更喜欢链式调用的风格,也可以这么写:
int targetUserId = 1; var friendList = dbContext.Friend .Where(f => f.UserID == targetUserId) .Join(dbContext.Member, f => f.FriendID, m => m.ID, (f, m) => new { FriendID = m.ID, FriendName = m.UserName }) .ToList();
2. 配置了EF导航属性时(更简洁的写法)
如果你的Friend实体已经配置了导航属性(比如在Friend类里加public Member FriendMember { get; set; }),查询会更清爽:
int targetUserId = 1; var friendList = dbContext.Friend .Where(f => f.UserID == targetUserId) .Include(f => f.FriendMember) // 加载关联的好友成员信息 .Select(f => new { FriendID = f.FriendMember.ID, FriendName = f.FriendMember.UserName }) .ToList();
要是你的Member实体还配置了反向导航(比如public ICollection<Friend> Friends { get; set; }),还能从Member表直接发起查询:
int targetUserId = 1; var friendList = dbContext.Member .Where(m => m.ID == targetUserId) .SelectMany(m => m.Friends) .Select(f => new { FriendID = f.FriendID, FriendName = f.FriendMember.UserName }) .ToList();
小提示
- 记得把
dbContext替换成你项目里实际的EF上下文类实例 - 如果好友关系是双向的(比如表中同时存在(1,2)和(2,1)),可以在查询后加
.Distinct()去重 - 这些查询都是延迟执行的,调用
.ToList()才会实际向数据库发起请求
内容的提问来源于stack exchange,提问作者behzad
相关产品推荐
相关产品推荐

