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

在.NET Core中用Linq Join扩展自动完成方法,从两同列名表取邮箱

结合tbl_Account与tbl_Contacts实现邮箱自动完成功能

原代码局限

你的现有代码仅从tbl_Account表筛选活跃用户的邮箱,现在可以通过LINQ Join关联tbl_Contacts表,同时获取两个表中符合条件的邮箱数据。以下是实现方案:

使用LINQ Join的实现代码

假设我们以Email字段作为关联条件(若两表有其他业务关联字段,可替换为对应字段),同时保留筛选逻辑:

public async Task<List<string>> EmailSearch(string filter)
{
    try
    {
        var emailResults = await _context.tbl_Account
            .Join(
                _context.tbl_Contacts,
                account => account.Email,
                contact => contact.Email,
                (account, contact) => new { account.Email, account.IsActive }
            )
            .Where(x => x.IsActive == true && x.Email.Contains(filter))
            .Select(x => x.Email)
            .Distinct() // 去重两个表中重复的邮箱
            .ToListAsync();

        return emailResults;
    }
    catch (Exception)
    {
        throw;
    }
}

补充:若需独立筛选两表数据(Union方案)

如果你的需求是分别从tbl_Account(活跃用户)和tbl_Contacts中筛选包含指定关键词的邮箱,再合并去重,使用Union会更贴合场景:

public async Task<List<string>> EmailSearch(string filter)
{
    try
    {
        var accountEmails = await _context.tbl_Account
            .Where(x => x.IsActive == true && x.Email.Contains(filter))
            .Select(x => x.Email)
            .ToListAsync();

        var contactEmails = await _context.tbl_Contacts
            .Where(x => x.Email.Contains(filter)) // 若tbl_Contacts也有IsActive字段,可添加对应筛选条件
            .Select(x => x.Email)
            .ToListAsync();

        var combinedEmails = accountEmails.Union(contactEmails).ToList();
        return combinedEmails;
    }
    catch (Exception)
    {
        throw;
    }
}

说明

  • 若两表存在业务关联字段(如用户ID),建议替换Join的关联条件为该字段,避免因邮箱重复导致的错误关联。
  • Distinct()或Union用于移除两个表中重复的邮箱记录,可根据实际需求选择使用。

内容的提问来源于stack exchange,提问作者Rack Sonn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:24:48