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

C#如何按userno匹配过滤合并两个DataTable(LINQ实现)

DataTable按字段关联合并实现方案

LINQ原生支持DataTable的关联操作,只要引入System.Data.DataSetExtensions程序集,就可以通过AsEnumerable()扩展方法对DataTable执行LINQ查询,完全可以实现你需要的按userno匹配合并的需求。

实现代码

using System.Data;
using System.Linq;

public DataTable MergeByUserno(DataTable table1, DataTable table2)
{
    // 初始化结果表结构
    DataTable result = new DataTable();
    result.Columns.Add("id", typeof(int));
    result.Columns.Add("user", typeof(string));
    result.Columns.Add("userno", typeof(string));
    result.Columns.Add("secondid", typeof(int));

    // 按userno做内连接查询,仅保留两边匹配成功的行
    var joinResult = from row1 in table1.AsEnumerable()
                     join row2 in table2.AsEnumerable()
                     on row1.Field<string>("userno") equals row2.Field<string>("userno")
                     select new
                     {
                         id = row1.Field<int>("id"),
                         user = row1.Field<string>("user"),
                         userno = row1.Field<string>("userno"),
                         secondid = row2.Field<int>("id")
                     };

    // 填充结果到DataTable
    foreach (var item in joinResult)
    {
        DataRow newRow = result.NewRow();
        newRow["id"] = item.id;
        newRow["user"] = item.user;
        newRow["userno"] = item.userno;
        newRow["secondid"] = item.secondid;
        result.Rows.Add(newRow);
    }

    return result;
}

注意事项

  • 上述代码使用内连接逻辑,只会返回两个表中userno完全匹配的记录,符合过滤合并的要求
  • 如果实际业务中字段类型和示例不一致(比如id为long类型、userno存在空值),只需要调整Field<T>()方法的泛型参数、增加空值判断即可
  • 如果需要保留table1中所有未匹配到table2的记录,可以将内连接修改为左连接写法,未匹配到的secondid字段赋值DBNull.Value
  • 执行前请确认项目已经引用System.Data.DataSetExtensions,否则无法使用DataTable的LINQ扩展方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:33:43