Linq在datatable上查询(“not in”)

时间:2008-11-26 17:49:56

标签: linq

我想从TableA表中返回另一个表中不存在的所有行。

e.g。

select bench_id from TableA where bench_id not in (select bench_id from TableB )
你能帮我写一下等效的LINQ查询吗?这里TableA来自Excel,TableB来自数据库

我正在将Excel工作表数据加载到DataTableTableATableB我从数据库加载。简而言之,TableATableB的类型为DataTable

3 个答案:

答案 0 :(得分:4)

因此,如果表A来自Excel,您是否先将数据加载到内存中?如果是这样(即你正在使用LINQ to Objects),那么我建议你将表B中的ID加载到一个集合中,然后使用:

var query = tableA.Where(entry => !tableBIdSet.Contains(entry.Id));

如果这不合适,请提供更多详细信息。

转换为集合最好只使用the HashSet constructor which takes an IEnumerable<T>。例如:

var tableBIdSet = new HashSet<string>(db.TableB.Select(entry => entry.Id));

(如果ID实际上并不相同,您可以在末尾添加对Distinct()的调用。)

答案 1 :(得分:1)

var lPenaltyEmployee = from row1 in tBal.getPenaltyEmployeeList().AsEnumerable()
                                   select row1;

var PenaltyEmp = new HashSet<string>(lPenaltyEmployee.Select(Entry => Entry.Emsrno);

DataTable lAbsentEmp = (from row in tBal.getAbsentEmployee(txtFromDate.Text).AsEnumerable()
                                    where !(PenaltyEmp).Contains(row["Emsrno"].ToString())
                                    select row).CopyToDataTable();

答案 2 :(得分:0)

From a in TableA
Group Join b in TableB on a.bench_id Equalsb.bench_id into g = Group
Where g.Count = 0
Select a