通过避免使用某些不同的列来过滤掉DataTable

时间:2014-01-09 19:21:34

标签: c# sql-server filter datatable

我有一个名为 dtEmployee 的DataTable,有四列,即。 EmployeeId,EmployeePosition,SupervisorPosition,SupervisorId都是varchar(10)类型。

enter image description here

我想在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

如何才能使整个查询等效。

感谢您的帮助。感谢。

  • Merin

1 个答案:

答案 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);
    }
}