基于另一个数据表中的记录从一个数据表格中删除记录

本文关键字:记录 数据表 一个 删除 数据 表格 另一个 | 更新日期: 2023-09-27 18:24:05

我在第一个数据表中得到了以下结果:

带有上传文档的数据表

clientcode    jobcode    joburl                          DocumentLink
1             1          http://ourlocaldomain.com       http://ourlocaldomain.com/documents/1.pdf
1             2          http://ourlocaldomain.com       http://ourlocaldomain.com/documents/2.pdf

包含所有客户端和作业的数据表,无论文档是否已上载。(第二个数据表上不存在文档链接列)

clientcode    jobcode    joburl                          
1             1          http://ourlocaldomain.com       
1             2          http://ourlocaldomain.com       
1             3          http://ourlocaldomain.com    
1             4          http://ourlocaldomain.com

我的第三个数据表应该返回数据表2中不在数据表1中的所有记录,基于具有客户端代码和作业代码的匹配记录。

我想这应该与LINQ有关,但不知道从哪里开始挖掘:

我的代码是:

var keywordQueryAllInfoLists = new KeywordQuery(site);
dataTableAllInfoLists = KQLUtilities.ExecuteKql(keywordQueryAllInfoLists, queryTextAllInfoLists, selectedProperties.ToArray(), keywordQueryAllInfoLists.SortList);
var keywordQuery = new KeywordQuery(site);
dataTableAllEngagementLetters = KQLUtilities.ExecuteKql(keywordQuery, queryTextAllLetterOfEngagement, selectedProperties.ToArray(), keywordQuery.SortList);

编辑我尝试过以下几种:

resultingDatatable = dataTableAllEngagementLetters.Select()
                    .Where(x => !dataTableAllInfoLists.Select(string.Format("ClientCode = {0} and JobCode = {1}", x["ClientCode"], x["JobCode"]))
                    .Any())
                    .CopyToDataTable();

resultingDatatable = dataTableAllEngagementLetters.Select()
                    .Where(x => !dataTableAllInfoLists.Select(string.Format("ClientCode = [{0}] and JobCode = [{1}]", x["ClientCode"], x["JobCode"]))
                    .Any())
                    .CopyToDataTable();

这两个给我带来了以下异常:http://screencast.com/t/HWLZTOJEn8T

  resultingDatatable = dataTableAllEngagementLetters.Select()
                        .Where(x => !dataTableAllInfoLists.Select(string.Format("ClientCode = '{0}' and JobCode = '{1}'", x["ClientCode"], x["JobCode"]))
                        .Any())
                        .CopyToDataTable();

最后一个告诉我源代码上有行!

基于另一个数据表中的记录从一个数据表格中删除记录

不是很好,但这是我脑海中出现的第一个解决方案:

DataTable dataTable3 = dataTable2.Select().Where(x => dataTable1.Select(string.Format("clientCode = '{0}' and jobCode = '{1}'", x["clientCode"], x["jobCode"])).Count() == 0).CopyToDataTable();

编辑

Count == 0您可以更改为!Any()。所以应该是这样的:

DataTable dataTable3 = dataTable2.Select().Where(x => !dataTable1.Select(string.Format("clientCode = '{0}' and jobCode = '{1}'", x["clientCode"], x["jobCode"])).Any()).CopyToDataTable();