LINQ加入两个DataTables

 打工仔成军军 发布于 2023-02-08 12:38

嗨,我在使用LINQ加入两个DataTable时遇到问题.表有这样的列:

table1        table2
ID, name       ID, stock
1, item1       1, 100
2, item2       3, 50
3, item3

我用linq这样加入:

DataTable dtResult = new DataTable();
dtResult.Columns.Add("ID", typeof(string));
dtResult.Columns.Add("name", typeof(string));
dtResult.Columns.Add("stock", typeof(int));

var result = from dataRows1 in table1.AsEnumerable()
             join dataRows2 in table2.AsEnumerable()
             on dataRows1.Field("ID") equals dataRows2.Field("ID")

             select dtResult.LoadDataRow(new object[]
             {
                dataRows1.Field("ID"),
                dataRows1.Field("name"),
                dataRows2.Field("stock"),
              }, false);
result.CopyToDataTable();

问题是,结果只显示表2中的ID.

dtResult
ID, name, stock
1, item1, 100
3, item3, 50

我还要展示丢失的物品.这是想要的结果:

dtResult
ID, name, stock
1, item1, 100
2, item2, 0  //Prefer if it is "0", otherwise can be left "null"
3, item3, 50

我相信我应该做左外连接,但我对linq没有足够的了解.帮助赞赏.谢谢!

1 个回答
  • 如果table2中不存在行,这将允许您默认为0:

    var result = from dataRows1 in table1.AsEnumerable()
                 join dataRows2 in table2.AsEnumerable()
                 on dataRows1.Field<string>("ID") equals dataRows2.Field<string>("ID") into lj
                 from r in lj.DefaultIfEmpty()
                 select dtResult.LoadDataRow(new object[]
                 {
                    dataRows1.Field<string>("ID"),
                    dataRows1.Field<string>("name"),
                    r == null ? 0 : r.Field<int>("stock")
                  }, false);
    

    MSDN 来源

    2023-02-08 12:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有