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

C#中如何获取Table1中满足特定条件的ID数据

问题:获取满足条件的Table1 ID

我有两个数据表,需要获取Table1中的ID,满足以下任一条件:

  • 该行的User在Table2中存在
  • 该行的ID为3(无论User是否存在)

当前测试代码仅能获取到Table2中存在对应User的Table1的ID,无法同时获取ID=3的行。根据示例数据,期望输出如下:

  • 第一个示例:idGet = "1,3"
  • 第二个示例:idGet = "2,3"

原测试代码:

string idGet = "";

string getValue = "Select ID, Port, User from Table1";
DataTable dtgetValue = XLDL.ReadTable(getValue);
if(dtgetValue.Rows.Count > 0)
{
    List<ListOtherUser> listOtherUser = new List<ListOtherUser>();
    for (int i = 0; i < dtgetValue.Rows.Count; i++)
    {
        listOtherUser.Add(new ListOtherUser { ID = dtgetValue.Rows[i]["ID"].ToString(), User = dtgetValue.Rows[i]["User"].ToString(), Port = dtgetValue.Rows[i]["Port"].ToString() });
    }
    
    foreach (var itemuser in listOtherUser)
    {
        string checkUser = "Select ID from Table2 where User = N'" + itemuser.User + "'";
        DataTable dtcheckUser = XLDL.ReadTable(checkUser);
        if (dtcheckUser.Rows.Count > 0)
        {
            idGet += itemuser.ID + ",";                                        
        }
        else
        {
            //Here I want to continue to get the data of row ID=3 from Table1. However I don't know how to solve it?
        }
    }
}

方案1:直接用SQL查询(推荐)

这种方式无需循环查询数据库,一次SQL即可完成,性能更优,避免N+1查询问题。

方式A:使用IN子查询

SELECT ID FROM Table1
WHERE User IN (SELECT User FROM Table2)
OR ID = 3

方式B:使用LEFT JOIN

SELECT DISTINCT t1.ID 
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.User = t2.User
WHERE t2.User IS NOT NULL OR t1.ID = 3

执行这个SQL后,直接读取结果集即可得到符合条件的ID,无需后续循环处理。


方案2:修改现有C#代码

如果需要保留原有代码逻辑,可通过添加ID判断并引入去重机制来实现需求:

string idGet = "";
// 用HashSet自动去重,避免ID=3被重复添加(比如其User同时在Table2中)
HashSet<string> uniqueIds = new HashSet<string>();

string getValue = "Select ID, Port, User from Table1";
DataTable dtgetValue = XLDL.ReadTable(getValue);
if(dtgetValue.Rows.Count > 0)
{
    List<ListOtherUser> listOtherUser = new List<ListOtherUser>();
    for (int i = 0; i < dtgetValue.Rows.Count; i++)
    {
        listOtherUser.Add(new ListOtherUser { 
            ID = dtgetValue.Rows[i]["ID"].ToString(), 
            User = dtgetValue.Rows[i]["User"].ToString(), 
            Port = dtgetValue.Rows[i]["Port"].ToString() 
        });
    }
    
    foreach (var itemuser in listOtherUser)
    {
        string checkUser = "Select ID from Table2 where User = N'" + itemuser.User + "'";
        DataTable dtcheckUser = XLDL.ReadTable(checkUser);
        
        // 满足任一条件即加入结果:User在Table2存在,或ID为3
        if (dtcheckUser.Rows.Count > 0 || itemuser.ID == "3")
        {
            uniqueIds.Add(itemuser.ID);
        }
    }
    
    // 将去重后的ID拼接为逗号分隔的字符串
    idGet = string.Join(",", uniqueIds);
}

说明:

  • 使用HashSet<string>存储ID,自动避免重复值(比如当ID=3的User同时存在于Table2时,不会被添加两次)
  • 直接在判断条件中加入itemuser.ID == "3",覆盖第二种需求场景
  • 最后用string.Join将HashSet转为所需的字符串格式

内容的提问来源于stack exchange,提问作者Chim Di Tru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:35:42