2011-11-15 90 views
3

是否有內置的方式(LINQ也許?)從DataTable的特定列中獲取所有行值並從中創建HashSet?該列也是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框架3.5+