2011-11-15 19 views
3

DataTableの特定の列のすべての行の値を取得し、そこからHashSetを作成する方法は、組み込みの方法(LINQなのでしょうか?列の型もStringです。DataTableの列からHashSetを作成する

私は明らかにこれをループで行うことができましたが、別の方法があるかどうか疑問に思っていましたか?

私は.net 3.5 btwを使用しています。

おかげで、

AJ

+0

まあDataTable.Columns [0]あなたのリストの権利を与えます。あなたはLinqの拡張機能を使ってこれまでどおり何でもすることができます。 – Zenwalker

答えて

2

はこれを試すが、ループせずに、ハッシュテーブルの値の配列値をコピーする方法がわかりません。

string[] strArray = datatable.AsEnumerable().Select(s => s.Field<string>("MyContent")).ToArray<string>(); 

次に、ハッシュテーブル値に物をコピーします(ループは一方向です)。

希望します。

+0

ありがとうございました。私はHashSet .Unionメソッドを使用して、結果を既存のハッシュセットとマージしました。 –

+0

あなたのコードを投稿することはできますか – Sandy

1

LINQを使用して私の提案:

IEnumerable<string> values = 
     dataTable 
     .Rows 
     .Cast<DataRow>() 
     .Select(row => row["ColumnName"]) 
     .Cast<string>(); 

    HashSet<string> hashSet = new HashSet<string>(values); 
1

拡張メソッド

public static class Extensions 
{ 
    public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source) 
    { 
     return new HashSet<T>(source); 
    } 
} 

を作成し、その後

HashSet<string> values = table.AsEnumerable().Select(row => row.Field<string>("Columnname")).ToHashSet(); 
1

を呼び出すには、プロジェクトを作成し、3.5にそれを切り替えます。 これを達成するための単純なライナーがあります(LINQには感謝します)。 これは将来これを見ている人に役立ちます。

HashSet<string> yourHashSet = new HashSet<string>(dt.AsEnumerable().Select(x => x.Field<string>("YourColumn"))) 

注:このソリューションは、.NET Frameworkのためである3.5+

関連する問題