2012-03-09 10 views
3

を無視し、そのカスタムの人々はそれはユーザ名によって、ほかの人の名前で検索するSharePointの2010年はDataTableのマージが、私は次のコードを持って、重複行

ピッカ。 私のユーザ名の一部を試してみると、そのaに検索が含まれているので:cia

それはユーザ名にも人名にも一致するので、私の重複した行が表示されます。

これは(私はLINQを使用カント私のコードです:

protected override int IssueQuery(string search, string groupName, int pageIndex, int pageSize) 
{ 
    try 
    { 
     // Find any user that has a matching name 
     var table = ADHelper.ExecuteNameQuery(RootPath, search); 

     // 20249: Search by username, method was already done, but it was not being called. 
     var table2 = ADHelper.ExecutesAMAccountNameQuery(search); 
     table2.Merge(table,); 
     PickerDialog.Results = table2; 

答えて

7

通常DataTable.Mergeメソッドは暗黙的に重複が削除されますが、すべてのカラムの値が同じである場合にのみ、

私がもしわかりません。そこsimplier何かが(あなたがLINQを使用できないことを述べてきました)ですが、両方をマージし、その後重複を削除できます。

List<string> dupColumns = new List<string>(); 
dupColumns.Add("ColumnA"); 
dupColumns.Add("ColumnB"); 
table2.Merge(table,); 
RemoveDuplicates(table2, dupColumns); 

そしてここレムはオベ・重複機能:

private void RemoveDuplicates(DataTable table, List<string> keyColumns) 
{ 
    Dictionary<string, string> uniquenessDict = new Dictionary<string, string>(table.Rows.Count); 
    System.Text.StringBuilder sb = null; 
    int rowIndex = 0; 
    DataRow row; 
    DataRowCollection rows = table.Rows; 
    while (rowIndex < rows.Count) 
    { 
     row = rows[rowIndex]; 
     sb = new System.Text.StringBuilder(); 
     foreach (string colname in keyColumns) 
     { 
      sb.Append(((string)row[colname])); 
     } 

     if (uniquenessDict.ContainsKey(sb.ToString())) 
     { 
      rows.Remove(row); 
     } 
     else 
     { 
      uniquenessDict.Add(sb.ToString(), string.Empty); 
      rowIndex++; 
     } 
    } 
} 
1
you should the .ToTable function 

ここでのサンプルコードは

 DataTable DT1 = new DataTable(); 
    DT1.Columns.Add("c_" + DT1.Columns.Count); 
    DT1.Columns.Add("c_" + DT1.Columns.Count); 
    DT1.Columns.Add("c_" + DT1.Columns.Count); 

    DataRow DR = DT1.NewRow(); 
    DR[0] = 0; 
    DR[1] = 1; 
    DR[2] = 2; 
    DT1.Rows.Add(DR); 

    DataTable DT2 = new DataTable(); 
    DT2.Columns.Add("c_" + DT2.Columns.Count); 
    DT2.Columns.Add("c_" + DT2.Columns.Count); 
    DT2.Columns.Add("c_" + DT2.Columns.Count); 
    DT2.Columns.Add("c_" + DT2.Columns.Count); 

    DR = DT2.NewRow(); 
    DR[0] = 0; 
    DR[1] = 1; 
    DR[2] = 2; 
    DR[3] = 3; 
    DT2.Rows.Add(DR); 

    DT1.Merge(DT2); 
    Trace.IsEnabled = true; 
    DataTable DT_3=DT1.DefaultView.ToTable(true,new string[]{"c_1","c_2","c_0"}); 
    foreach (DataRow CDR in DT_3.Rows) 
    { 
     Trace.Warn("val",CDR[1]+"");//you will find only one data row 
    } 
です
関連する問題