2014-01-09 39 views
-1

我有一個名爲dtEmployee的DataTable,它有四列, EmployeeId,EmployeePosition,SupervisorPosition,SupervisorId,它們都是varchar(10)類型。通過避免一些不同的列來過濾掉DataTable

enter image description here

我想過濾的dtEmployee,其結果等同於以下SQL查詢的結果。

Select * from dtEmployee where EmployeePosition not in (Select distinct SupervisorPosition 
from dtEmployee); 

我已經創建另一個數據表命名dtDistinctSupervisors實現的子查詢等同

dtDistinctSupervisors = dtEmployee.DefaultView.ToTable(true, "SupervisorPosNum"); 

這相當於Select distinct SupervisorPosition from dtEmployee

我怎樣才能得到整個查詢等價的。

您的幫助表示讚賞。謝謝。

  • Merin

回答

1

DistinctIN子查詢裏面沒有什麼區別。這點應該是:

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

非常感謝您的輸入馬格努斯。你能否也請幫我填充**結果**內的數據並計算**結果**內的項目數。 –

+0

「填充」是什麼意思?您可以附加一個'.ToList()'作爲結束,以獲取行的列表。 – Magnus

+0

填充意味着查看** result **中的所有行項目。 –