You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:47:00