none
請教如何在DataTable裡搜尋某個欄位裡所有不重複的值(vb2005) RRS feed

  • 問題

  • 請教如何在DataTable裡搜尋某個欄位裡所有不重複的值
    類似SQL裡的DISTINCT
    謝謝
    2007年1月4日 上午 01:34

解答

  • VB 的泛型用法我不太熟悉(C# 用慣了),C# 是這樣寫的:

    List<string> keys = new List<string>();

    foreach (DataRow row in table.Rows) // table 是你的資料表,keyColumn 是你要比對的欄位。
    {
         if (!keys.Contains(row["keyColumn"].ToString()) // 判斷有沒有重覆。
             keys.Add(row["keyColumn"].ToString());
    }

    string[] distinctValues = keys.ToArray(); // 輸出所有不重覆的值的陣列。

    2007年1月4日 上午 09:29
    版主
  • 提供一個新方法(.NET 2.0 才有的),這個方法很少人用 ...

    Dim view As DataView = New DataView(table)
    Dim newTable = view.ToTable(true, "col1", "col2", "col3", ...)

    DataView.ToTable() 可以輸出具有 DISTINCT 能力的 DataTable,不過我沒實際試過,你可以試看看。

    2007年1月5日 上午 10:24
    版主

所有回覆

  • 目前在 DataColumn.Expression 裡面沒有這樣的語法,你可能要自己撰寫,你可以搭配 List<Type> 的泛型集合類別來實作重覆偵測的方法。
    2007年1月4日 上午 01:48
    版主
  • 謝謝小朱

    可是您說的方法我不太會

    不知是否有範例

    謝謝

     

    2007年1月4日 上午 09:03
  • VB 的泛型用法我不太熟悉(C# 用慣了),C# 是這樣寫的:

    List<string> keys = new List<string>();

    foreach (DataRow row in table.Rows) // table 是你的資料表,keyColumn 是你要比對的欄位。
    {
         if (!keys.Contains(row["keyColumn"].ToString()) // 判斷有沒有重覆。
             keys.Add(row["keyColumn"].ToString());
    }

    string[] distinctValues = keys.ToArray(); // 輸出所有不重覆的值的陣列。

    2007年1月4日 上午 09:29
    版主
  • 謝謝

     

    2007年1月5日 上午 01:48
  • 提供一個新方法(.NET 2.0 才有的),這個方法很少人用 ...

    Dim view As DataView = New DataView(table)
    Dim newTable = view.ToTable(true, "col1", "col2", "col3", ...)

    DataView.ToTable() 可以輸出具有 DISTINCT 能力的 DataTable,不過我沒實際試過,你可以試看看。

    2007年1月5日 上午 10:24
    版主
  • 可以耶

    真是太好用了

    太謝謝您了

     

    2007年1月6日 上午 01:42