我想从TableA
表中返回另一个表中不存在的所有行。
e.g。
select bench_id from TableA where bench_id not in (select bench_id from TableB )
你能帮我写一下等效的LINQ查询吗?这里TableA
来自Excel,TableB
来自数据库
我正在将Excel工作表数据加载到DataTable
,TableA
。 TableB
我从数据库加载。简而言之,TableA
和TableB
的类型为DataTable
答案 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