我有一个名为 dtEmployee 的DataTable,有四列,即。 EmployeeId,EmployeePosition,SupervisorPosition,SupervisorId都是varchar(10)类型。
我想在dtEmployee中过滤结果,其结果等同于下面的SQL查询。
Select * from dtEmployee where EmployeePosition not in (Select distinct SupervisorPosition
from dtEmployee);
我通过创建名为 dtDistinctSupervisors 的另一个DataTable
来实现等效的子查询dtDistinctSupervisors = dtEmployee.DefaultView.ToTable(true, "SupervisorPosNum");
这相当于Select distinct SupervisorPosition
from dtEmployee
如何才能使整个查询等效。
感谢您的帮助。感谢。
答案 0 :(得分:1)
在Distinct
子查询中包含IN
没有任何区别。这应该点缀它:
var dt = dtEmployee.AsEnumerable();
var result = dt.Where(emp => !dt.Any(sup =>
sup.Field<string>("SupervisorPosition") ==
emp.Field<string>("EmployeePosition")));
并在控制台中显示结果:
foreach (DataRow row in result) // Loop over the rows.
{
Console.WriteLine("--- Row ---");
foreach (var item in row.ItemArray)
{
Console.Write("Item: ");
Console.WriteLine(item);
}
}