根据另一个数据表中的记录从一个数据表中删除记录

时间:2014-09-22 13:47:54

标签: c# asp.net linq entity-framework datatable

我在第一个数据表中有以下结果:

带有上传文件的数据表

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

我的第3个数据表应该返回Datatable2中不在数据表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();

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

1 个答案:

答案 0 :(得分:1)

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

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();