【问题标题】:Filter out a DataTable by avoid some of its distinct columns通过避免某些不同的列来过滤掉 DataTable
【发布时间】:2014-01-09 19:21:34
【问题描述】:

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

我想过滤 dtEmployee 中的结果,其结果相当于下面的 SQL Query。

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

如何获得整个查询等效项。

感谢您的帮助。谢谢。

  • 梅林

【问题讨论】:

    标签: c# sql-server filter datatable


    【解决方案1】:

    IN 子查询中包含Distinct 没有区别。这应该点它:

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

    【讨论】:

    • 非常感谢您的意见 Magnus。您能否帮我填充 result 中的数据并计算 result 中的项目数。
    • “填充”是什么意思?您可以在末尾附加 .ToList() 以获取行列表。
    • Populate 表示查看 result 内的所有行项。
    • @MerinNakarmi 您需要某种视觉组件,这取决于您工作的环境。
    • 我正在使用 Visual Studio 20012。我只想在命令提示符下使用 Console.WriteLine(); 打印它们
    猜你喜欢
    • 2021-07-22
    • 1970-01-01
    • 2012-02-02
    • 2016-08-02
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多